线程死锁:两个线程或者以上的线程并发执行时,因抢夺共享资源而造成的互相等待的现象。
3、死锁的四要素
只要同时满足这四个条件,就肯定会死锁:
互斥条件
持有并等待条件
不可剥夺条件
环路等待条件
4、避免死锁的三种思路
避免死锁,只需要破坏掉四大条件的其中一个即可。
互斥条件没办法破坏,本来锁的目的就是互斥
所以只需要破坏以下三项中的其中一项即可:
破坏持有并等待条件:一个线程必须一次性申请所有的锁,不能单独持有某一个锁
破坏不可剥夺条件:一个线程获取不到锁时,就先主动释放持有的所有锁
破坏环路等待条件:规定各个线程获取锁的顺序
注意:三种思路,但是在具体的场景中,每种做法的开销都是不同的,需要找到开销最低的方式。