我使用ScheduledThreadPoolExecutor.scheduledAtFixedRate
来安排某个任务每隔dt
间隔运行一次。
但有时,我确实想强制立即执行任务。任务执行完毕后,我希望计划恢复正常。 (即,在“强制”执行后的一段dt
时间内,任务应该再次执行。)
是否可以使用ScheduledThreadPoolExecutor
执行此操作?你能告诉我怎么样吗?一些简单的例子会很棒!
我想人们可以通过简单地关闭计划,手动执行任务,再次调用scheduleAtFixedRate
来做到这一点,但我想知道这是不是很好。
由于
答案 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
,但不会停止执行之前安排的任务。这真的是一个问题吗?