使用给定的延迟调度特定时间间隔的java进程

Anu*_*pam 6 java schedule scheduler scheduled-tasks

我们希望安排一个java进程运行到特定的时间间隔.目前我正在考虑使用TimerTask来安排这个过程.在每个循环的开始,将检查当前时间,然后与给定时间进行比较,并在时间结束时停止该过程.我们的代码如下所示:

import java.util.Timer;
import java.util.TimerTask;

public class Scheduler extends TimerTask{

    public void run(){
        //compare with a given time, with getCurrentTime , and do a System.exit(0);
        System.out.println("Output");
    }

    public static void main(String[] args) {
        Scheduler scheduler = new Scheduler();
        Timer timer = new Timer();
        timer.scheduleAtFixedRate(scheduler, 0, 1000);

    }

}
Run Code Online (Sandbox Code Playgroud)

有更好的方法吗?

Lau*_* L. 3

您可以在上述时间限制内安排另一个任务并在计时器上调用取消,而不是在每次迭代中检查是否已达到时间限制。

根据复杂性,您可能会考虑使用 ScheduledExecutorService,例如 ScheduledThreadPoolExecutor。请参阅此答案何时以及为何。

带定时器的简单工作示例:

public class App {
    public static void main(String[] args) {
        final Timer timer = new Timer();
        Timer stopTaskTimer = new Timer();
        TimerTask task = new TimerTask() {
            @Override
            public void run() {
                System.out.println("Output");
            }
        };
        TimerTask stopTask = new TimerTask() {
            @Override
            public void run() {
                timer.cancel();
            }
        };

        //schedule your repetitive task
        timer.scheduleAtFixedRate(task, 0, 1000);
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date date = sdf.parse("2015-06-09 14:06:30");
            //schedule when to stop it
            stopTaskTimer.schedule(stopTask, date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)