java中什么叫线程死锁,举个例子
时间: 2024-04-30 11:21:40 浏览: 99
线程死锁是指两个或多个线程在互相等待对方释放资源时,导致所有线程都无法继续执行的情况。一个典型的死锁场景是:线程A持有资源1,等待获取资源2,而线程B持有资源2,等待获取资源1,这样两个线程就会相互等待,导致死锁。
以下是一个简单的Java代码示例,演示了线程死锁的情况:
```
public class DeadlockExample {
private static Object resource1 = new Object();
private static Object resource2 = new Object();
public static void main(String[] args) {
Thread thread1 = new Thread(() -> {
synchronized (resource1) {
System.out.println("Thread 1: Holding resource 1...");
try {
Thread.sleep(10);
} catch (InterruptedException e) {
}
System.out.println("Thread 1: Waiting for resource 2...");
synchronized (resource2) {
System.out.println("Thread 1: Holding resource 1 and 2...");
}
}
});
Thread thread2 = new Thread(() -> {
synchronized (resource2) {
System.out.println("Thread 2: Holding resource 2...");
try {
Thread.sleep(10);
} catch (InterruptedException e) {
}
System.out.println("Thread 2: Waiting for resource 1...");
synchronized (resource1) {
System.out.println("Thread 2: Holding resource 1 and 2...");
}
}
});
thread1.start();
thread2.start();
}
}
```
在上述代码中,我们创建了两个线程并分别让它们获取两个资源。然后,每个线程都休眠一段时间,以模拟它们在使用资源。但是,由于这两个线程都需要持有对方的资源才能继续执行,因此它们陷入了死锁状态,最终导致程序无法继续执行。
阅读全文