ThreadDeath 上的线程生命周期

Thread lifecycle on ThreadDeath

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

假设我不关心锁但想释放目前分配的资源。我希望取消器 know/wait 直到线程完成释放其分配。假设 finally 部分在 finally 部分有一个无限循环。 thread.join 会成功处理该线程吗?

这取决于在抛出 ThreadDeath 时线程正在执行什么代码。例如,如果您的线程恰好在到达 finally 块的顶部时停止,那么您可能会遇到这样一种情况,即在进入该块之后但在资源关闭之前抛出 ThreadDeath,并且该 finally 块不会完全的。

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