- 一、场景
- 二、案例代码
- 1、线程T1
- 2、线程T2
- 三、检测诊断
- 1、查询java进程
- 2、查看线程栈信息,并导出
- 3、打开线程栈信息,查找死锁标识
二、案例代码 1、线程T1 2、线程T2 三、检测诊断 1、查询java进程启动两个线程,线程T1先对资源R1加锁,然后立马对资源R2申请加锁;线程T2先对资源R2加锁,然后立马对资源R1申请加锁。此时线程T1因为T2已经对资源R2加锁,所以一直等待释放R2;T2则一直等待T1释放R1,造成相互等待对方释放锁资源而造成的死锁。
jps -l2、查看线程栈信息,并导出
# 查看 jstack 7281 # 导出到文件 jstack 7281 > /tmp/7281.bin
3、打开线程栈信息,查找死锁标识7281为进程号
可以搜索自己的包名,也可以搜索deadlock
可以明显看到死锁发生在DeadLockController.java的84行和58行代码处
特别感谢参考:https://www.ixigua.com/6842644783408611851?id=6842502368282542596&logTag=0d2f7511c602bc4f1005



