gpt4 book ai didi

java - FutureTask 取消()

转载 作者:行者123 更新时间:2023-12-01 23:40:42 28 4
gpt4 key购买 nike

基本上我有以下代码片段,


(let [task (FutureTask. fn)
thr (Thread. task)]
(.start thr)
;;wait for signal...
(.cancel task true)
(.stop thr))

问题是偶尔取消不起作用,AFAICT取消会导致抛出异常,但下面的一些代码可以捕获它?有没有确定的方法可以取消 future 的任务?

fn 是一个基本上执行一系列长时间运行计算的函数,因此我无法循环检查 boolean 标志。

最佳答案

Java 中没有办法自动停止正在运行的任务 - 在一般情况下,简单地“杀死”正在执行的线程是不安全的,因为这样做可能会使事情处于不一致的状态。因此,Java 故意忽略了此功能。

当您取消任务时,会在执行线程中设置一个标志,但不会引发异常。为了允许取消任务,您必须编写代码来定期检查线程是否已被中断:

while (notDone) {
if (Thread.isInterrupted()){
return; // we were cancelled (or interrupted in some other way)
}

doSomeHardWork()
}

关于java - FutureTask 取消(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6969978/

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