Java 确保无死锁的方法和框架

Java 确保无死锁的方法和框架,java,multithreading,deadlock,Java,Multithreading,Deadlock,尽管这适用于这里的任何多线程环境,但我只询问Java。仅关于纯Java,由从Java访问的外部设备引起的死锁(如数据库死锁)不是本文的主题。 如果使用得当,有哪些方法和支持框架可以保证代码没有死锁 我所知道的是: 无多线程。这是许多GUI框架使用的解决方案 单一全局锁。由于效率降低,不是一个好的解决方案 以固定顺序访问锁。我知道没有框架支持这一点 静态分析很有帮助,因为它可以检测许多潜在死锁的情况,但不能提供任何保证。#1在有多个进程时没有用处,而#2甚至不值得一提#3是你唯一需要的。由于锁

尽管这适用于这里的任何多线程环境,但我只询问Java。仅关于纯Java,由从Java访问的外部设备引起的死锁(如数据库死锁)不是本文的主题。
如果使用得当,有哪些方法和支持框架可以保证代码没有死锁

我所知道的是:

  • 无多线程。这是许多GUI框架使用的解决方案
  • 单一全局锁。由于效率降低,不是一个好的解决方案
  • 以固定顺序访问锁。我知道没有框架支持这一点

静态分析很有帮助,因为它可以检测许多潜在死锁的情况,但不能提供任何保证。

#1在有多个进程时没有用处,而#2甚至不值得一提#3是你唯一需要的。由于锁获取顺序是由应用程序定义的,所以您不能有一个框架来确保。你的问题没有真正的意义。对于数组,用于访问它的索引是由应用程序定义的,但是VM通过抛出IndexOutOfBoundsException(如果索引不属于正确的范围)来强制索引属于正确的范围。是否不可能开发出一个框架,在适当的情况下,它会抛出一个锁,而在有多个进程的情况下,#1是没有用的,而#2甚至不值得一提#3是你唯一需要的。由于锁获取顺序是由应用程序定义的,所以您不能有一个框架来确保。你的问题没有真正的意义。对于数组,用于访问它的索引是由应用程序定义的,但是VM通过抛出IndexOutOfBoundsException(如果索引不属于正确的范围)来强制索引属于正确的范围。在合适的情况下,是否不可能开发出一个框架,从而使锁具脱离正常感觉?