4.29 每日总结(死锁举例)
,死锁是指两个或多个线程在运行过程中,因争夺资源而造成的一种僵局,每个线程都持有对方需要的资源,而无法继续执行。以下是一个典型的死锁示例代码:
public class DeadLockExample {
// 定义两个锁对象
private final Object lock1 = new Object();
private final Object lock2 = new Object();
public static void main(String[] args) {
DeadLockExample example = new DeadLockExample();
example.startThreads();
}
public void startThreads() {
// 创建线程1,先获取lock1,再尝试获取lock2
Thread thread1 = new Thread(() -> {
synchronized (lock1) {
System.out.println("Thread 1: Holding lock 1...");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread 1: Waiting for lock 2...");
synchronized (lock2) {
System.out.println("Thread 1: Holding lock 1 & 2...");
}
}
});
// 创建线程2,先获取lock2,再尝试获取lock1
Thread thread2 = new Thread(() -> {
synchronized (lock2) {
System.out.println("Thread 2: Holding lock 2...");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread 2: Waiting for lock 1...");
synchronized (lock1) {
System.out.println("Thread 2: Holding lock 1 & 2...");
}
}
});
// 启动线程1和线程2
thread1.start();
thread2.start();
}
}

浙公网安备 33010602011771号