死锁(Dead Lock)指的是两个或两个以上的运算单元(进程、线程或协程),都在等待对方释放资源,但没有一方提起释放资源,从而造成了一种阻塞的现象就称为死锁。
比如线程 1 拥有了锁 A 的情况下试图获取锁 B,而线程 2 又在拥有了锁 B 的情况下试图获取锁 A,这样双方就进入相互阻塞等待的情况,如下图所示:
死锁的代码实现如下:
import java.util.concurrent.TimeUnit;
public class DeadLockTest {
public static void main(String[] args) {
Object lockA = new Object();
Object lockB = new Object();
// 创建线程 1
Thread t1 = new Thread(() -> {
// 1.占有锁 A
synchronized (lockA) {
System.out.println("线程1:获得锁A。");
// 休眠 1s(让线程 2 有时间先占有锁 B)
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace()