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