定位死锁
定位死锁最常见的方式就是利用jstack等工具获取线程栈,然后定位互相之间的依赖关系,进而找到死锁。
如果程序运行时发生了死锁,绝大多数情况下都是无法在线解决的,只能重启、修正程序本身问题。所以,代码开发阶段互相审查,或者利用工具进行预防性排查。
如何在编程中尽量预防死锁呢?
尽量避免使用多个锁,并且只有在需要时才持有锁。
如果必须使用多个锁,尽量设计好锁的获取顺序。
使用带超时的方法,为程序带来更多可控性。
通过静态代码分析(如FindBugs)去查找固定的模式,进而定位可能的死锁或者竞争情况。