用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对象时,两个线程都会因为无法得到另一个对象的锁而无限等待,产生死锁。