什么是死锁
死锁是两个及两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无力干涉,那他们将无法推进下去。如果系统资源充足,进程的资源请求都能得到满足,死锁出现的可能性就会比较低,否则就会因争夺有限的资源而陷入死锁。
死锁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();}}@AllArgsConstructorclass HoldDeadLockThread implements Runnable {private String lockA;private String lockB;@Overridepublic 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 进程编号:

