ThreadDeath上的线程生命周期

时间:2016-05-12 18:55:56

标签: java multithreading lifecycle terminate cancellation

我想开始计算并在用户取消时终止它。你说调用Thead.stop()会解锁所有监视器并引发ThreadDeath异常。这意味着仍然会调用finally

假设我不关心锁,但想要释放到目前为止分配的资源。我希望取消者知道/等待线程完成释放其分配。假设finally部分在finally部分中有一个无限循环。 thread.join会成功接受该线程吗?

1 个答案:

答案 0 :(得分:1)

这取决于线程在抛出ThreadDeath的位置执行的代码。例如,如果您的线程在碰巧到达finally块的顶部时被停止,那么您可能会遇到这样的情况:在输入块之后但在资源关闭之前抛出ThreadDeath,并且最终块不会完成。

使用中断会更容易出错,这使得被中断的线程可以完全控制它如何完成并关闭其资源。