调度中心启动时主要执行了XxlJobScheduler.init()方法,该方法中有六个初始化动作,这篇文章来分析第三个初始化动作:初始化失败任务管理中心。其关键调用代码为:JobFailMonitorHelper.getInstance().start();
源码分析
来看com.xxl.job.admin.core.thread.JobFailMonitorHelper类的源码。
成员变量
先看类的主要成员变量:
私有slf4j日志对象;
私有静态JobFailMonitorHelper类实例对象:instance;
私有成员变量:Thread类对象monitorThread;
私有布尔变量toStop,初始化为false。
成员方法实例instance的公有静态访问器getInstance();
公有start()方法;
公有toStop()方法。
私有failAlarm()方法,用于失败告警。
其中公有静态访问器getInstance()和私有静态JobFailMonitorHelper类实例对象instance共同形成了饿汉式单例模式。
start()方法解析
可以发现该类的主要实现是在start()方法中,先折叠一些实现我们来看下整体。
给私有成员变量Thread类对象monitorThread赋值,即创建一个子线程:实现Runnable接口并重写其run方法;
将其设置为守护线程;
设置线程名为:xxl-job, admin JobFailMonitorHelper;
调用线程的start()方法启动线程。
这其实是一个守护线程。
我们继续来看子线程重写的run方法的具体实现:
看起来实现有点长,我们逐渐将其拆解来分析。
1while (!toStop) {
循环,判断的条件为私