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