Ham*_*aya 2 java clojure futuretask
基本上我有以下片段,
(let [task (FutureTask. fn)
thr (Thread. task)]
(.start thr)
;;wait for signal...
(.cancel task true)
(.stop thr))
问题是偶尔取消不起作用,AFAICT取消原因和异常被抛出但是一些代码下线了吗?是否有可靠的方法取消未来的任务?
fn是一个基本上执行一系列长时间运行计算的函数,因此我无法循环检查布尔标志.
小智 6
没有办法在Java中自动停止正在运行的任务 - 在一般情况下,简单地"杀死"正在执行的线程是不安全的,因为这样做会使事情处于不一致状态.结果,这种能力被故意遗漏了Java.
取消任务时,在执行线程中设置一个标志,但不会抛出异常.为了允许取消任务,您必须编写代码以定期检查线程是否已被中断:
while (notDone) {
if (Thread.isInterrupted()){
return; // we were cancelled (or interrupted in some other way)
}
doSomeHardWork()
}
Run Code Online (Sandbox Code Playgroud)