写一段会造成死锁的代码
时间: 2023-07-10 17:25:44 浏览: 56
以下是一个可能会造成死锁的Java代码示例:
```java
public class DeadlockDemo {
private static final Object lock1 = new Object();
private static final Object lock2 = new Object();
public static void main(String[] args) {
Thread t1 = new Thread(() -> {
synchronized (lock1) {
System.out.println("Thread 1 acquired lock 1");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lock2) {
System.out.println("Thread 1 acquired lock 2");
}
}
});
Thread t2 = new Thread(() -> {
synchronized (lock2) {
System.out.println("Thread 2 acquired lock 2");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lock1) {
System.out.println("Thread 2 acquired lock 1");
}
}
});
t1.start();
t2.start();
}
}
```
在这个示例中,有两个线程t1和t2,它们分别需要获取lock1和lock2这两个锁。如果t1先获取了lock1,然后t2获取了lock2,接着t1尝试获取lock2,但此时lock2已经被t2获取了,t1就会进入等待状态,同时t2也在等待t1释放lock1。这时就会发生死锁,因为两个线程都在等待对方释放锁,无法继续执行。