例子
两个人吃饭,只有两根筷子,如果每个人各拿了一根筷子不放手,就出现了死锁。
代码
//Main.java
public class Main {
public static void main(String[] args) {
Object o1 = new Object();
Object o2 = new Object();
new Thread() {
@Override
public void run() {
synchronized (o1) {
System.out.println(currentThread().getName() + ": 我拿到锁1啦!");
try {
sleep(100);
} catch (Exception e) {
e.printStackTrace();
}
synchronized (o2) {
System.out.println(currentThread().getName() + ": 我拿到锁2啦!");
}
}
}
}.start();
new Thread() {
@Override
public void run() {
synchronized (o2) {
System.out.println(currentThread().getName() + ": 我拿到锁2啦!");
synchronized (o1) {
System.out.println(currentThread().getName() + ": 我拿到锁1啦!");
}
}
}
}.start();
}
}
//输出以下内容后无限等待
//Thread-0: 我拿到锁1啦!
//Thread-1: 我拿到锁2啦!