死锁
会产生死锁的必要条件
1.互斥使用,获取锁的过程是互斥的,一个线程拿了这把锁,另一个线程也想获取,就需要阻塞等待
2.不可抢占,前锁只有主动解锁,后锁才能获取到线程,不可抢行夺取
3.请求保持,线程在持有A的情况下,尝试获取锁B
4.循环等待
死锁一般有3种情况
1.一个线程一把锁
如果你设置的锁的不可重入的锁,且一个线程对这把锁加锁两次,就会出现死锁
2.两个线程两把锁
当我们有两个不同的线程,线程1拿到锁A,线程2拿到锁B,在让线程1去拿锁B,让线程2去拿锁A,这样就会出现死锁的情况,因为线程1或者是线程2的最外层的锁A/B都没有释放锁,都在处于阻塞状态

3.N个线程M把锁
相当于5个人同时去吃面而老板只给了5根筷子,如何让5个人都吃到面,就会制订规矩,因为线程是随机调度的,我们制定规矩让其中一个人先吃,这个人吃完后就退出让下一个人吃,以此类推
解决死锁的方法
根据代码破坏死锁形成的必要条件,

浙公网安备 33010602011771号