我有一个后台任务,我使用ScheduledThreadPoolExecutor和类似的代码运行。
executor.scheduleWithFixedDelay(new BackgroundSync(), 0, 15, TimeUnit.MINUTES);
BackgroundSync实现Runnable。
有时从用户事件开始,我希望延迟事件现在运行,而不是在15分钟计时器关闭时运行。
一些要求:
一次只能运行一个“ BackgroundSync”
基于用户事件,如果尚未运行BackgroundSync,我应该能够立即安排BackgroundSync。
最佳答案
scheduleWithFixedDelay返回ScheduledFuture。调用它时,请将其存储在某个地方,如果要立即执行,请检查它是否存在。然后,您可以使用cancel方法取消计划的将来,并再次计划可运行对象以立即执行。