死锁:java
java程序没法从死锁中恢复过来,在设计时必定要排除有可能发生死锁的地方。线程
一、锁顺序死锁:设计
若是全部线程都以固定的顺序来获取锁,那么就不会出现死锁。对象
A、B两个锁,方法1是先锁A,再锁B,方法2是先锁B,再锁A。开发
线程1调用方法1锁住了 A ,尝试去获取B ,线程2调用方法2锁住了 B,尝试去获取 A 同步
二、动态的锁顺序死锁:程序
因为参数的传递不可控,致使锁顺序死锁。方法
三、协助对象之间发生死锁时间
若是在持有锁时调用某个外部方法,那么将出现活跃性问题。在这个外部方法中可能会获取其余锁(可能会产生死锁),或者阻塞时间过长,致使其余线程没法及时获取当前被持有的锁。阻塞
四、开发调用
调用某个方法时不须要持有锁,那么这种调用被称为开发调用。尽量的不要在方法体上直接加同步锁,而是在须要被保护涉及共享状态的操做上加锁。
五、