Java线程死锁:为何Java不能像数据库那样从死锁中恢复?

问题 JVM可否做到和数据库事务处理一样,对死锁进行处理?如果不可以,那么想知道原因是什么?

抛砖引玉:

《Java并发编程实战》中描述顺序死锁现象,提到哲学家进餐问题,数据库事务在顺序死锁发生时会选择一个牺牲者释放资源并可以重新执行,此时事务可正常完成。
由此想到,JVM可否在死锁发生时,找到牺牲者释放资源?如果在JVM层面能够完成死锁避免,多线程编程是否会简单很多?

重申一下,问题是JVM可否做到和数据库事务处理一样,对死锁进行处理?如果不可以,那么想知道原因是什么?

阅读 2.6k
2 个回答

死锁避免最多是lock()方法在将会导致死锁时抛出一个exception。这使多线程编程更复杂了吧?想象每个lock()方法都有可能exception的情况。。所以PLSQL也挺难写的,PLSQL就是会遇到这种死锁导致的exception,然后总是要想办法处理。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题