gpt4 book ai didi

Java 死锁 : are there cases where it is not a bug?

转载 作者:行者123 更新时间:2023-11-28 22:06:52 25 4
gpt4 key购买 nike

我获取了一个 Java 程序的线程转储,它说发现一个 Java 级别的死锁

我可以自信地断言这个程序中存在错误吗?

对我来说,这听起来像 deadlock是编程问题,唯一的解决办法就是修复源代码。
我错了吗?是否存在死锁是程序执行的正常部分并且死锁最终以某种方式消失的情况?

这是一个相当传统的 Java 网络应用程序,拥有数百名用户。两个相互等待的线程似乎是一个Tomcat请求 worker 和一名 Lucene索引作业,均使用 sun.misc.Unsafe.park。据我所知,该程序没有任何线程监控元复杂性。

最佳答案

Are there circumstances where a deadlock is a normal part of the program's execution, and the deadlock eventually somehow disappears?

理论上是的,这取决于死锁的类型。

例如,如果两个线程 Object.wait() 死锁,其中一个等待调用可能会超时(最终)。或者,第三个线程可以通过在其中一个死锁线程上调用 Thread.interrupt() 来打破死锁。这可能是故意打破僵局的策略,也可能出于其他原因。

另一方面,获取原始互斥量的死锁永远不会自行消失,并且不能通过调用其中一个已弃用的线程停止/终止方法来打破。如果这样做,您可能会使数据结构处于中间状态,从而导致在打破锁后继续操作会出现问题。


要寻找的关键是阻塞 Action 是否可中断;例如是否可以抛出 InterruptedException 或类似异常。

关于Java 死锁 : are there cases where it is not a bug?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11303885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com