干扰ScheduledThreadPoolExecutor的日程安排

时间:2013-04-08 20:12:30

标签: java timer scheduled-tasks

我使用ScheduledThreadPoolExecutor.scheduledAtFixedRate来安排某个任务每隔dt间隔运行一次。

但有时,我确实想强制立即执行任务。任务执行完毕后,我希望计划恢复正常。 (即,在“强制”执行后的一段dt时间内,任务应该再次执行。)

是否可以使用ScheduledThreadPoolExecutor执行此操作?你能告诉我怎么样吗?一些简单的例子会很棒!

我想人们可以通过简单地关闭计划,手动执行任务,再次调用scheduleAtFixedRate来做到这一点,但我想知道这是不是很好。

由于

2 个答案:

答案 0 :(得分:2)

这是一个很好的问题。也许您可以通过致电cancel()致电ScheduledFuture<T>上的scheduledAtFixedRate(),使用submit()手动提交任务,然后在Future重新安排固定费率任务1}}回来了?您必须检查任务是否已经在运行我想。

一些伪代码...

ScheduledFuture<Thingy> sf = executor.scheduleAtFixedRate(myTask, etc...);
sf.cancel();
final Future<Thingy> f = executor.submit(myTask);
f.get();
sf = executor.scheduleAtFixedRate(myTask, etc...);

我从来没有这样做过,这是一个有趣的问题。

答案 1 :(得分:-1)

对于一次性执行使用

ScheduledFuture<Thingy> sf = executor.schedule(myTask, 0, SECONDS);

这将立即执行myTask,但不会停止执行之前安排的任务。这真的是一个问题吗?