线程死锁就是有两个线程,一个线程锁住了资源A,又想去锁定资源B,另外一个线程锁定了资源B,又想去锁定资源A,两个线程都想去得到对方的资源,而又不愿释放自己的资源从而造成一种互相等待,无法执行的情况
1、出现死锁后,tps降为0,压力测试工具无法得到服务器的响应,服务器硬件资源空闲, 2、通过jvisualvm去查看线程情况,至少两个线程一直处于红色的阻塞状态 3、死锁经常表现为程序的停顿,或者不再响应用户的请求。从操作系统上观察,对应进程的CPU占用率为零。

1、通过 jvisualvm 进行线程 dump ,对线程状态进行分析,获取到哪行代码导致的死锁
2、通过 jstack pid > jh.log 进行线程 dump 并保存信息到当前目录的 jh.log文件中 ,对线程状态进行分析,获取到哪行代码导致的死锁
一个Block的线程已经锁了 <0x00000000f0fadbd8> 这个资源,等待锁定 <0x00000000f0fadbe8>
另一个Block的线程已经锁了 <0x00000000f0fadbe8> 这个资源,等待锁定 <0x00000000f0fadbd8>
◼ 避免嵌套加锁
◼ 减小锁粒度