Java多线程并发编程:死锁问题实例展示
死锁是多线程编程中一个常见的并发问题。当两个或更多的线程在执行过程中,因争夺资源而造成的一种互相等待的现象时,就可能出现死锁。
以下是一个简单的Java死锁示例:
// 线程1需要线程2的资源
class Thread1 extends Thread {
private static Object lock1 = new Object();
private static Object lock2 = new Object();
@Override
public void run() {
synchronized (lock1) {
System.out.println("Thread 1: Acquiring lock1...");
// 线程1需要线程2的资源,这需要锁2
synchronized (lock2) {
System.out.println("Thread 1: Acquiring lock2...");
// 此时线程2已经在使用资源了,所以线程1无法获取资源,从而陷入死锁
lock2.notify();
}
}
}
}
// 线程2需要线程1的资源
class Thread2 extends Thread {
private static Object lock1 = new Object();
private static Object lock2 = new Object();
@Override
public void run() {
synchronized (lock1) {
System.out.println("Thread 2: Acquiring lock1...");
// 线程2需要线程1的资源,这需要锁2
synchronized (lock2) {
System.out.println("Thread 2: Acquiring lock2...");
// 此时线程1已经在使用资源了,所以线程2无法获取资源,从而陷入死锁
lock1.notify();
}
}
}
}
public class Main {
public static void main(String[] args) {
Thread1 thread1 = new Thread1();
Thread2 thread2 = new Thread2();
thread1.start();
thread2.start();
}
}
在这个例子中,线程1需要线程2的资源(锁2),同时线程2也需要线程1的资源(锁1)。结果就是两个线程互相等待对方释放资源,从而导致死锁。
还没有评论,来说两句吧...