计划运行TimerTask时下次运行

时间:2018-06-16 16:22:17

标签: java timer

所以我有一个重复的TimerTask,每隔x秒运行一次(我说x可以由用户更改)

我还需要在几秒钟内将UI功能添加为“下次执行的时间”。我可以做一些事情,我存储一个AtomicInteger,我每秒递增一次,然后做一些其他的整数检查,如果我想实际“运行”任务。但是我理想地寻找一种更简单的方法(例如,如果我每秒运行一次任务,但实际代码应该每隔566ms运行一次,它将无法正常工作)。我已经看过TimerTask#scheduledExecutionTime,但它会返回它上次运行的时间。有更简单的方法吗?感谢

1 个答案:

答案 0 :(得分:1)

您可以使用ScheduledThreadPoolExecutor.scheduleAtFixedRate

这是简单的例子

public static void main(String[] args) throws InterruptedException {
        ScheduledThreadPoolExecutor scheduledThreadPoolExecutor = new ScheduledThreadPoolExecutor(10);

        ScheduledFuture<?> task = scheduledThreadPoolExecutor.scheduleAtFixedRate(() -> {
            System.out.println("task");
        }, 1, 1, TimeUnit.SECONDS);

        scheduledThreadPoolExecutor.scheduleAtFixedRate(() -> {
            System.out.println("until " + task.getDelay(TimeUnit.MILLISECONDS));
        }, 500, 700, TimeUnit.MILLISECONDS);

        Thread.sleep(10000);
        scheduledThreadPoolExecutor.shutdownNow();
    }