gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:02:52 24 4
gpt4 key购买 nike

假设我有一个 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()。但是这只是设置了一个标志来告诉工作线程被中断了。

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

最佳答案

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

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

关于java - Future.cancel(true) 下面发生了什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26516372/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com