java - 在给定延迟的特定时间间隔内安排java进程

标签 java scheduled-tasks scheduler schedule

我们想要安排一个 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);

    }

}

有更好的方法吗?

最佳答案

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

根据复杂性,您可能会考虑使用 ScheduledExecutorService,例如 ScheduledThreadPoolExecutor。 See in this answer when and why.

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

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();
        }
    }
}

关于java - 在给定延迟的特定时间间隔内安排java进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30729657/

相关文章:

android - 日历,每24小时执行一次代码

java - 如何并行运行 EJB 调度程序

java - 处理3.2中设置图像colorkey

java - 如何在运行时将 PatternLayout 添加到根记录器?

java - Graphstream 多线程 - Java

linux - 批处理复杂任务图的监控/恢复

java - scheduleAtFixedRate 与 scheduleWithFixedDelay

scheduler - 完全公平调度器 vs 循环法

java - 如何使用 Javascript 或 Java Servlet 获取客户端信息?

java - 定时器:取消正在运行的任务