Java 干扰ScheduledThreadPoolExecutor';s计划

Java 干扰ScheduledThreadPoolExecutor';s计划,java,timer,scheduled-tasks,Java,Timer,Scheduled Tasks,我使用了ScheduledThreadPoolExecutor.scheduledAtFixedRate来调度一些任务,以便在每个dt间隔运行 但有时,我确实想强制立即执行任务。任务执行后,我希望计划恢复正常。(即,在“强制”执行后的一些dt时间量,任务应再次执行) 是否可以使用ScheduledThreadPoolExecutor?你能告诉我怎么做吗?一些简单的例子将是伟大的 我想可以通过简单地关闭调度,手动执行任务,然后再次调用scheduleAtFixedRate来实现这一点,但我想知道这

我使用了
ScheduledThreadPoolExecutor.scheduledAtFixedRate
来调度一些任务,以便在每个
dt
间隔运行

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

是否可以使用
ScheduledThreadPoolExecutor
?你能告诉我怎么做吗?一些简单的例子将是伟大的

我想可以通过简单地关闭调度,手动执行任务,然后再次调用
scheduleAtFixedRate
来实现这一点,但我想知道这是否是一种好的做法


谢谢,这是个好问题。也许您可以在调用ScheduledAffixedRate()收到的
ScheduledFuture
上调用
cancel()
,使用
submit()
手动提交任务,然后在该
未来
返回时再次重新安排固定费率任务?我想您必须检查任务是否尚未运行

一些伪代码

ScheduledFuture<Thingy> sf = executor.scheduleAtFixedRate(myTask, etc...);
sf.cancel();
final Future<Thingy> f = executor.submit(myTask);
f.get();
sf = executor.scheduleAtFixedRate(myTask, etc...);
ScheduledFuture sf=executor.scheduleAtFixedRate(myTask等);
sf.cancel();
最终未来f=执行者提交(myTask);
f、 get();
sf=executor.scheduleAtFixedRate(myTask等);

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

对于一次性执行使用

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

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

谢谢你的回答,我有点想这样做,但我想这是一个很好的做法。还有其他我应该注意的落差吗?嗯,。。。不会给你一些错误,比如“任务”已经安排好了吗?为什么?任务(可运行或可调用实例)已打包并安排。没有执行者会检查是否存在,你可以随时提交一项任务。也许我没有提到这一点,但如果我只是盲目提交任务,那么这两项执行有可能同时发生,我不希望发生这种情况。这就是为什么我想“强制”立即执行任务,而不是提交新任务。