什么是死锁
死锁是两个及两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无力干涉,那他们将无法推进下去。如果系统资源充足,进程的资源请求都能得到满足,死锁出现的可能性就会比较低,否则就会因争夺有限的资源而陷入死锁。
死锁demo
package com.interview.demo;
import lombok.AllArgsConstructor;
import java.util.concurrent.TimeUnit;
/**
* @Author leijs
* @date 2022/3/29
*/
public class DeadLockDemo {
public static void main(String[] args) {
String lockA = "lockA";
String lockB = "lockB";
new Thread(new HoldDeadLockThread(lockA, lockB), "AAAAA").start();
new Thread(new HoldDeadLockThread(lockB, lockA), "BBBB").start();
}
}
@AllArgsConstructor
class HoldDeadLockThread implements Runnable {
private String lockA;
private String lockB;
@Override
public void run() {
synchronized (lockA) {
System.out.println(Thread.currentThread().getName() + "自己持有" + lockA + "尝试获取" + lockB);
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lockB) {
System.out.println(Thread.currentThread().getName() + "自己持有" + lockB + "尝试获取" + lockA);
}
}
}
}
怎么排查死锁?
jstack 进程编号: