小编Mik*_*iev的帖子

如何确定取消的ScheduledFuture是否实际上未取消?

我正在使用ScheduledExecutorService并提交这样的任务:

future = scheduledExecutorService.schedule(myRunnableTask, delay, timeunit)
Run Code Online (Sandbox Code Playgroud)

但是,一定时间后可能会发生某个事件,这表明不再需要此任务。所以我需要取消此任务,而我正在使用

boolean cancelled = future.cancel(false) 线。

取消后,我必须根据提交的可运行对象是否实际运行来采取不同的操作。在这里,让我们首先进入Oracle文档并阅读cancelled标志的含义:

https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Future.html#cancel(boolean)

返回:如果无法取消任务(通常是因为它已经正常完成),则返回false;否则返回false。否则为真

这就是关于返回值的全部内容。似乎写此文本行的人false在这里不确定返回值,但我认为我可以接受。

现在,让我们集中讨论返回的情况true。这里有两种可能性:

  1. 该任务实际上已取消,并且无法运行。
  2. 可运行对象正在运行中,因此无法取消。(除非我执行一些线程中断逻辑,而这并不是我真正想做的)

我对这两种情况都可以,但是我想知道实际发生的一种并采取相应的措施。如果可运行对象正在处理中,那么我可以完成它的工作,我想等待它完成,然后做一件事。但是,如果它被取消并且根本不会运行,我想做另一件事。

您能推荐一种解决方法吗?我想念什么吗?

java concurrency scheduled-tasks java.util.concurrent

5
推荐指数
1
解决办法
155
查看次数