0%

写一个简单的死锁

用Java写一个简单的死锁。

死锁

死锁(英语:Deadlock),又译为死结,计算机科学名词。当两个以上的运算单元,双方都在等待对方停止运行,以获取系统资源,但是没有一方提前退出时,就称为死锁。—wikipedia

Java实现

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
public class Test {
public static void main(String[] args) {
Object a = new Object();
Object b = new Object();

new Thread(() -> {
while (true) {
synchronized (a) {
synchronized (b) {
System.out.println(Thread.currentThread());
}
}
}
}).start();
new Thread(() -> {
while (true) {
synchronized (b) {
synchronized (a) {
System.out.println(Thread.currentThread());
}
}
}
}).start();
}
}

两个线程分先后顺序锁住两个对象,当一个线程锁住a对象,另一个线程锁住b对象时,两个线程都会因为无法得到另一个对象的锁而无限等待,产生死锁。