我有一个后台任务,我使用ScheduledThreadPoolExecutor和类似的代码运行。

executor.scheduleWithFixedDelay(new BackgroundSync(), 0, 15, TimeUnit.MINUTES);


BackgroundSync实现Runnable。

有时从用户事件开始,我希望延迟事件现在运行,而不是在15分钟计时器关闭时运行。

一些要求:


一次只能运行一个“ BackgroundSync”
基于用户事件,如果尚未运行BackgroundSync,我应该能够立即安排BackgroundSync。

最佳答案

scheduleWithFixedDelay返回ScheduledFuture。调用它时,请将其存储在某个地方,如果要立即执行,请检查它是否存在。然后,您可以使用cancel方法取消计划的将来,并再次计划可运行对象以立即执行。

08-17 10:13