Future.cancel(true)下发生了什么

假设我有一个Runnable实例:

class MyTask implements Runnable {

public void run() {

//some heavy calculation which takes time

Thread.sleep(5000)

//rest code

...

}

}

然后,我使用ExecutorService提交上述任务:

ExecutorService service = Executors.newFixedThreadPool(3);

Future<?> task = service.submit(new MyTask());

现在,我可以通过取消任务task.cancel(true);。我了解的是task.cancel(true)将会中断正在运行此任务的工作线程,例如Thread.currentThread().interrupt()。但这

来告知工作线程已中断。

我的问题是:如果MyTaskRunnable已开始运行,实际上如何future.cancel(true)run()继续执行其余代码时停止我的代码?是否在下面定期检查工作线程的中断标志?我的意思是我不明白如何仅通过将中断标志设置为true来取消run()中的代码。

回答:

Future.cancel不保证您的工作程序代码将停止执​​行。它的作用是设置中断标志,并导致任何阻塞的JDK调用都抛出InterruptedException。您的工作程序代码可以选择重新抛出被中断的异常并定期检查被中断的标志,在这种情况下,取消机制将起作用。否则,您可以选择吞下InterruptedException而不理会iterrupted标志,在这种情况下,cancel机制将不执行任何操作,只能将canceled标志设置为true。

参见http://www.ibm.com/developerworks/library/j-jtp05236/

以上是 Future.cancel(true)下发生了什么 的全部内容, 来源链接: utcz.com/qa/433318.html

回到顶部