代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
/** * @desc 死锁 * @Author xw * @Date 2019/8/23 */ public class DeadLockDemo { public static void main(String[] args) { String lockA = "lockA"; String lockB = "lockB"; new Thread(new HoldLockThread(lockA, lockB), "AAA").start(); try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } new Thread(new HoldLockThread(lockB, lockA), "BBB").start(); } } class HoldLockThread implements Runnable { private String lockA; private String lockB; public HoldLockThread(String lockA, String lockB) { this.lockA = lockA; this.lockB = lockB; } @Override public void run() { synchronized (lockA) { // 锁A执有锁B 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); } } } }
(1)jps命令定位进程号
(2)jstack死锁查看