简单的死锁程序

前言

​ 在学习工程的同时也要注重基础,几个月前跟着书上写过的一个简单的死锁程序,写在博客中加深记忆

程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class DeadLockDemo {
private String A = "A";
private String B = "B";
public static void main(String[] args){
new DeadLockDemo().deadlock();
}
private void deadlock() {
Thread t1 = new Thread(() -> {
synchronized (A) {
try { Thread.currentThread().sleep(2000);
} catch (InterruptedException e){
e.printStackTrace();
}
synchronized (B) {
System.out.println("1");
}
}
});
Thread t2 = new Thread(() -> {
synchronized (B) {
synchronized (A) {
System.out.println("2");
}
}
});

t1.start();
t2.start();
}
}

​ 程序中有两个资源字符串A和字符串B,两个线程t1、t2,t1线程先将字符串A锁住,之后让该线程睡眠2s,在睡眠的过程中,线程t2给字符串B加锁,之后想要给字符串A加锁,发现字符串A已经被锁住,等待字符串A的锁被释放,t2线程从醒来,想对字符串B加锁,结果字符串B也被锁住,这样两个线程互相等待对方释放锁,程序无法运行,形成死锁。

---------------- The End ----------------

本文基于 知识共享署名-相同方式共享 4.0 国际许可协议发布
本文地址: https://cpsky.github.io/2019/07/07/简单的死锁程序/
转载请注明出处, 谢谢!

分享到: