死锁的原因?
1、是多个线程涉及到多个锁,这些锁存在着交叉,所以可能会导致了一个锁依赖的闭环。
例如:线程在获得了锁 A 并且没有释放的情况下去申请锁 B,这时,另一个线程
已经获得了锁 B,在释放锁 B 之前又要先获得锁 A,因此闭环发生,陷入死锁循环。
2、默认的锁申请操作是阻塞的。
所以要避免死锁,就要在一遇到多个对象锁交叉的情况,就要仔细审查这几个对
象的类中的所有方法,是否存在着导致锁依赖的环路的可能性。总之是尽量避免
在一个同步方法中调用其它对象的延时方法和同步方法。
Java Program!