为什么java无法从死锁中恢复?

AKS*_*AKS 0 java multithreading jvm

我正在阅读"Java Concurrency in Practice"一书,这里有关于死锁的内容.

JVM无法从死锁中恢复,只有摆脱死锁的方法是重启服务器.它还提到JVM使用图搜索,其中Thread充当图节点,并且两个线程A和B之间的边缘被定义为线程A正在等待线程B已经拥有的资源上的锁定.此图是有针对性的,如果有任何周期这个图表,然后有死锁

现在我的问题是,如果JVM知道存在死锁,那为什么不杀死一个线程并让其他线程继续?这背后是否有任何具体原因或我的问题本身是基于错误的结论?

请告诉我您对此的看法.提前致谢!!!

Gra*_*ray 7

现在我的问题是,如果JVM知道存在死锁,那为什么不杀死一个线程并让其他线程继续?这背后是否有任何具体原因或我的问题本身是基于错误的结论?

JVM如何决定杀死哪个线程?如果JVM在强制释放锁定时允许无效数据进入某种关键数据库,该怎么办?

JVM无法任意做出这些决定.它报告死锁但无法自动从中恢复.

在使用锁修改两个关键对象但两个线程以不同顺序锁定它们的任何情况下,您都可以看到此问题.数据库事务能够从这种死锁中恢复,因为它们旨在回滚表和索引,但Java同步锁没有隐式内存回滚功能.通过杀死一个线程并释放其锁,JVM将允许传播部分内存更新.