死锁是指两个或多个线程在执行过程中,因争夺资源而造成的一种相互等待的现象。下面是一个Java多线程死锁的代码示例:
public class DeadlockDemo {
private static Object lock1 = new Object();
private static Object lock2 = new Object();
public static void main(String[] args) {
Thread thread1 = new Thread(() -> {
synchronized (lock1) {
System.out.println("线程1获取了锁1");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lock2) {
System.out.println("线程1获取了锁2");
}
}
});
Thread thread2 = new Thread(() -> {
synchronized (lock2) {
System.out.println("线程2获取了锁2");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lock1) {
System.out.println("线程2获取了锁1");
}
}
});
thread1.start();
thread2.start();
}
}
在这个示例中,我们创建了两个线程thread1
和thread2
,它们分别尝试获取lock1
和lock2
。由于这两个线程同时尝试获取对方持有的锁,导致它们都在等待对方释放锁,从而形成死锁。