4

我曾经ScheduledThreadPoolExecutor.scheduledAtFixedRate安排一些任务在每个dt间隔运行。

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

有可能做到这一点ScheduledThreadPoolExecutor吗?你能告诉我怎么做吗?一些简单的例子会很棒!

我想可以通过简单地关闭计划、手动执行任务并scheduleAtFixedRate再次调用来做到这一点,但我想知道这是否是一种好习惯。

谢谢

4

2 回答 2

2

这是个好问题。也许你可以调用你从调用中收到的cancel(),使用手动提交任务,然后当它回来时再次重新安排你的固定费率任务?我想您必须检查该任务是否尚未运行。ScheduledFuture<T>scheduledAtFixedRate()submit()Future

一些伪代码...

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

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

于 2013-04-08T20:17:16.090 回答
-1

对于一次性执行使用

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

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

于 2013-04-08T20:35:09.490 回答