【问题标题】:Thread lifecycle on ThreadDeathThreadDeath 上的线程生命周期
【发布时间】:2016-09-08 18:47:18
【问题描述】:

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

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

【问题讨论】:

    标签: java multithreading lifecycle terminate cancellation


    【解决方案1】:

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

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

    【讨论】:

    • AFAIK,你只能中断等待的线程,而不是那些在热中进行计算的线程。
    • @LittleAlien: 是的,被中断的线程必须要么检查它的中断标志,要么休眠或等待。
    • @LittleAlien:澄清一​​下,我只是说存在这种边缘情况,您可能无法在所有情况下都完全确定。
    猜你喜欢
    • 2022-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 2011-02-19
    相关资源
    最近更新 更多