我想开始计算并在用户取消时终止它。你说调用Thead.stop()
会解锁所有监视器并引发ThreadDeath
异常。这意味着仍然会调用finally
。
假设我不关心锁,但想要释放到目前为止分配的资源。我希望取消者知道/等待线程完成释放其分配。假设finally部分在finally部分中有一个无限循环。 thread.join
会成功接受该线程吗?
答案 0 :(得分:1)
这取决于线程在抛出ThreadDeath的位置执行的代码。例如,如果您的线程在碰巧到达finally块的顶部时被停止,那么您可能会遇到这样的情况:在输入块之后但在资源关闭之前抛出ThreadDeath,并且最终块不会完成。
使用中断会更容易出错,这使得被中断的线程可以完全控制它如何完成并关闭其资源。