死锁(Deadlock)知识点详解
1. 死锁的定义
多个线程因竞争资源而陷入相互等待的状态,若无外力干预,所有线程将无法继续执行。
2. 死锁产生的四个必要条件
条件 | 说明 |
---|---|
互斥(Mutual Exclusion) | 资源一次只能被一个线程占用(如锁)。 |
持有并等待(Hold and Wait) | 线程持有至少一个资源,同时等待其他线程占有的资源。 |
不可抢占(No Preemption) | 线程持有的资源只能主动释放,不能被其他线程强制抢占。 |
循环等待(Circular Wait) | 存在线程的循环等待链,每个线程都在等待下一个线程持有的资源。 |
3. 死锁示例代码
public class DeadlockDemo {
private static final Object lockA = new Object();
private static final Object lockB = new Object();
public static void main(String[] args) {
new Thread(() -> {
synchronized (lockA) {
System.out.println("线程1持有lockA");
try {
Thread.sleep