我想开始一个计算并在用户取消时终止它。你说调用 Thead.stop()
解锁所有监视器并引发 ThreadDeath
异常。这意味着 finally
仍然被调用。
假设我不关心锁但想释放到目前为止分配的资源。我希望取消器知道/等到线程完成释放其分配。假设 finally 部分在 finally 部分有一个无限循环。 thread.join
会成功连接到该线程吗?
最佳答案
这取决于在抛出 ThreadDeath 时线程正在执行什么代码。例如,如果您的线程恰好在到达 finally block 的顶部时停止,那么您可能会遇到这样一种情况,即在进入该 block 之后但在资源关闭之前抛出 ThreadDeath,并且该 finally block 不会完全的。
使用中断会更不容易出错,这让被中断的线程可以完全控制它如何完成和关闭它的资源。
关于java - ThreadDeath 上的线程生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37195300/