package com.xiaoleilu.hutool.cron.listener; import java.util.ArrayList; import java.util.List; import com.xiaoleilu.hutool.cron.TaskExecutor; /** * 监听调度器,统一管理监听 * @author Looly * */ public class TaskListenerManager { private List<TaskListener> listeners = new ArrayList<>(); /** * 增加监听器 * @param listener {@link TaskListener} * @return this */ public TaskListenerManager addListener(TaskListener listener){ synchronized (listeners) { this.listeners.add(listener); } return this; } /** * 移除监听器 * @param listener {@link TaskListener} * @return this */ public TaskListenerManager removeListener(TaskListener listener){ synchronized (listeners) { this.listeners.remove(listener); } return this; } /** * 通知所有监听任务启动器启动 * @param executor {@link TaskExecutor} */ public void notifyTaskStart(TaskExecutor executor) { synchronized (listeners) { int size = listeners.size(); for (int i = 0; i < size; i++) { TaskListener listenerl = listeners.get(i); listenerl.onStart(executor); } } } /** * 通知所有监听任务启动器成功结束 * @param executor {@link TaskExecutor} */ public void notifyTaskSucceeded(TaskExecutor executor) { synchronized (listeners) { int size = listeners.size(); for (int i = 0; i < size; i++) { TaskListener listenerl = listeners.get(i); listenerl.onSucceeded(executor); } } } /** * 通知所有监听任务启动器结束并失败<br> * 无监听将打印堆栈到命令行 * @param executor {@link TaskExecutor} * @param exception 失败原因 */ public void notifyTaskFailed(TaskExecutor executor, Throwable exception) { synchronized (listeners) { int size = listeners.size(); if(size > 0){ for (int i = 0; i < size; i++) { TaskListener listenerl = listeners.get(i); listenerl.onFailed(executor, exception); } }else{ exception.printStackTrace(); } } } }