提示,以防止java中的死锁

我正在研究Java线程和死锁,我理解死锁的例子,但我想知道是否有一些通用规则可以用来防止它。

我的问题是,如果有规则或技巧可以应用于java中的源代码来防止死锁? 如果是的话,你能解释一下如何实现它吗?


一些快速提示我的头脑

  • 不要使用多个线程(比如像Swing一样,例如强制所有东西都在EDT中完成)
  • 不要一次持有多个锁。 如果你这样做,总是以相同的顺序获取锁
  • 在锁定时不要执行外部代码
  • 使用可中断的锁

  • 封装,封装,封装! 可能你用锁具犯的最危险的错误就是将你的锁具暴露给世界(使之公开)。 如果你这样做,没有任何事情会发生,因为任何人都可以在没有对象知道的情况下获得锁(这也是为什么你不应该锁定this )。 如果你保持你的锁私人,那么你有完全的控制,这使得它更易于管理。


  • 通过使用无锁数据结构避免锁定(例如,使用ConcurrentLinkedQueue而不是同步的ArrayList
  • 始终以相同顺序获取锁,例如,为每个锁分配一个唯一的数值,并在获取具有较高数值的锁之前获取数值较低的锁
  • 超时后释放你的锁(从技术上讲,这不能防止死锁,它只是帮助他们发生后解决)
  • 链接地址: http://www.djcxy.com/p/76265.html

    上一篇: Tips to prevent deadlocks in java

    下一篇: How to use wait and notify in Java?