🔒1、什么是死锁
死锁是一个非常让程序猿烦恼的问题,一旦所写的程序有了死锁,那么程序就无法执行下去,会出现严重的 bug,并且死锁非常隐蔽,我们不会轻易发现它,在开发阶段,不经意期间我们就会写出死锁,很难检测出来。
那么什么是死锁呢?竟然让我们如此烦恼。
“死锁”就是2个或2个以上的线程互相持有对方想要的资源,导致各自处于阻塞等待状态,致使程序无法执行下去,这就是“死锁”。
简单来说:一共有两个线程两把锁,T1线程拿到了A锁,T2拿到了B锁,但是T1还想要B锁,T2还像要A锁,谁也不释放锁,就会产生死锁
两个线程两把锁,t1 和 t2 各自对 锁A 和 锁B 加锁,再尝试获取对方的锁。线程在竞争资源,导致死锁。
以下两张图希望可以帮到你
🔒2、死锁的三个典型情况
🔒2.1情况一
一个线程一把锁,连续加两次。如果锁是不[可重入锁](https://so.csdn.net/so/search?q=可重入锁&spm=1001.2101.3001.7020),就会死锁。
Java 里的 synchronized 和 ReentrantLock 都是可重入锁
🔒2.2情况二
两个线程两把锁,t1 和 t2 各自对 锁A 和 锁B 加锁,再尝试获取对方的锁。线程在竞争资源,导致死锁。
下面图解展示以下这种情况: