package com.juc.demo.thread.deadlock; import java.util.concurrent.TimeUnit; /** * 死锁编码及定位分析 * * jps -l 命令定位进程号 * jstack 进程号 找到死锁查看 * * * * */ 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) { System.out.println(Thread.currentThread().getName()+"\t 自己持有:"+lockA+"\t尝试获得:"+lockB); try { TimeUnit.SECONDS.sleep(2); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } synchronized(lockB) { System.out.println(Thread.currentThread().getName()+"\t 自己持有"+lockB+"\t 尝试获得"+this.lockA); } } } } public class DeadLockDemo { public static void main(String[] args) { String lockA = "lockA"; String lockB = "lockB"; new Thread(new HoldLockThread(lockA, lockB), "ThreadAA").start(); new Thread(new HoldLockThread(lockB, lockA),"ThreadBB").start(); } }