xuxueli / xxl-job

A distributed task scheduling framework.(分布式任务调度平台XXL-JOB)
http://www.xuxueli.com/xxl-job/
GNU General Public License v3.0
27.45k stars 10.86k forks source link

关于 com.xxl.job.admin.core.thread.JobRegistryMonitorHelper中有关线程的疑惑 #506

Closed grainrain closed 6 years ago

grainrain commented 6 years ago

Please answer some questions before submitting your issue. Thanks!

version of XXL-JOB

1.9.1

作者你好,在阅读源码JobRegistryMonitorHelper类后, 然后写了一个测试,有些疑问 ,请帮忙核实下

@Component
public class MonitorHelper {
    private static Logger logger = LoggerFactory.getLogger(MonitorHelper.class);

    private MonitorHelper(){

    }
    private static MonitorHelper instance = new MonitorHelper();

    public static MonitorHelper getInstance() {
        return instance;
    }

    private Thread registryThread;
    private volatile boolean toStop = false;

    public void start() {
        registryThread = new Thread(new Runnable() {
            @Override
            public void run() {
                while (!toStop) {
                    try {
                        logger.debug("job registry instance success");
                    } catch (Exception e) {
                        logger.error("job registry instance error:{}", e);
                    }
                    try {
                        TimeUnit.SECONDS.sleep(10);
                    } catch (InterruptedException e) {
                        logger.error("job registry instance error:{}", e);
                    }
                }
            }
        });
        registryThread.setDaemon(true);
        registryThread.start();
    }

    public void toStop() {
        toStop = true;
        // interrupt and wait
        registryThread.interrupt();
        try {
            registryThread.join();
            logger.debug("job stop instance success");
        } catch (InterruptedException e) {
            logger.error(e.getMessage(), e);
        }
    }

}
xuxueli commented 6 years ago

你好,JobRegistryMonitorHelper 只会在应用启动才会初始化一次,正常情况下不会存在重复启动、销毁的场景的。