java死锁示例代码 思想家
时间: 2023-10-28 10:05:28 浏览: 161
java 一个死锁的例子
5星 · 资源好评率100%
Java死锁示例代码:
```
public class DeadlockExample {
private static Object lock1 = new Object();
private static Object lock2 = new Object();
public static void main(String[] args) {
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
synchronized (lock1) {
System.out.println("Thread 1: Holding lock 1...");
try {
Thread.sleep(10);
} catch (InterruptedException e) {
}
System.out.println("Thread 1: Waiting for lock 2...");
synchronized (lock2) {
System.out.println("Thread 1: Holding lock 1 and 2...");
}
}
}
});
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
synchronized (lock2) {
System.out.println("Thread 2: Holding lock 2...");
try {
Thread.sleep(10);
} catch (InterruptedException e) {
}
System.out.println("Thread 2: Waiting for lock 1...");
synchronized (lock1) {
System.out.println("Thread 2: Holding lock 1 and 2...");
}
}
}
});
t1.start();
t2.start();
}
}
```
这个示例代码中,有两个线程(t1和t2),它们都在互相等待对方持有的锁而无法继续执行,从而导致了死锁。
线程t1首先获取了lock1的锁,并打印了一些信息,然后等待lock2的锁。线程t2则相反,首先获取了lock2的锁,并打印了一些信息,然后等待lock1的锁。由于这两个线程都在等待对方持有的锁,它们之间就出现了死锁。
这个示例代码中的死锁是由于两个线程使用了不同的锁顺序。如果两个线程使用相同的锁顺序,死锁就不会发生。
阅读全文