首页 > 解决方案 > 如何制作作业调度器?

问题描述

我想安排一个线程在每天凌晨 3 点执行任务。我使用 Java、quatrz API 等提供的 TimerTask 制作了调度程序。但是 TimeTask 和所有都无法满足我的要求。因为我的要求是我的调度程序不应该运行任何进程来检查服务器时间。意味着调度程序应用程序不能处于运行模式,只是为了检查服务器运行执行任务的时间。

我正在运行无限循环来检查服务器时间。当它是 3 点钟时,我的 if 条件被满足并且允许线程执行任务。

但是这种方法的问题是这个无限循环处于坚持应用程序运行到第二天早上 3 点的运行模式。是否有另一种方法可以在没有这种冗余运行模式的情况下每天 3 点启动此应用程序。

标签: javamultithreadingscheduled-tasksthreadpool

解决方案


你应该看看 isocline 的Clockwork,它是一个 java 流程引擎。它能够比 Quartz 更高效地编写各种功能,并具有特定的执行功能。

package isocline.clockwork.examples.basic;

import isocline.clockwork.*;
import isocline.clockwork.descriptor.CronDescriptor;
import org.junit.Test;

public class ClockRepeat implements Work {

    public long execute(WorkEvent event) throws InterruptedException {
        //TODO

        return WAIT;
    }

    @Test
    public void case1() throws Exception {

        WorkProcessor processor = WorkProcessorFactory.getDefaultProcessor();
        processor.createSchedule(new CronDescriptor("* 3 * * *"), this).activate();

        processor.awaitShutdown();
    }
}

推荐阅读