1、在程序中尽量使用开放调用。依赖于开放调用的程序,相比于那些在持有锁的时候还调用外部方法的程序,更容易进行死锁自由度的分析。重新构建synchronized使开放调用更加安全。所谓开放调用是指调用的方法本身没有加锁,但是要以对方法操作的内容进行加锁。
2、如果你必须获得多个锁,那么锁的顺序必须是你设计工作的一部分:尽量减少潜在锁之间的交互数量,遵守并文档化该锁顺序协议。监测代码中死锁自由度的策略有:
1)识别什么地方会获取多个锁,并使锁数量尽可能少,保证它们的顺序在程序中一致。
2)在没有非开放调用的程序中,发现那些获得多重锁的实例是非常简单的。
3、尝试定时的锁,使用每个显式Lock类中定时tryLock特性,来替代使用内部锁机制。