死锁的原因?

1、是多个线程涉及到多个锁,这些锁存在着交叉,所以可能会导致了一个锁依赖的闭环。

例如:线程在获得了锁 A 并且没有释放的情况下去申请锁 B,这时,另一个线程

已经获得了锁 B,在释放锁 B 之前又要先获得锁 A,因此闭环发生,陷入死锁循环。

2、默认的锁申请操作是阻塞的。

所以要避免死锁,就要在一遇到多个对象锁交叉的情况,就要仔细审查这几个对

象的类中的所有方法,是否存在着导致锁依赖的环路的可能性。总之是尽量避免

在一个同步方法中调用其它对象的延时方法和同步方法。

posted @ 2020-06-07 16:26  咔啡  阅读(161)  评论(0编辑  收藏  举报