产生死锁的4个条件:
- 互斥条件:同一个资源同时只能被一个线程所拥有。
- 请求与保持条件:一个线程在请求第二把锁发生阻塞,并且持有第一把锁保持不释放。
- 不剥夺条件:外间不能干扰。
- 循环等待。
定位死锁
jps -l
13072
13344 org.jetbrains.idea.maven.server.RemoteMavenServer
53344 com.cn.lock.Lock
54776 org.jetbrains.jps.cmdline.Launcher
55644 sun.tools.jps.Jps
执行jstack 53344
图1 显示了 两个线程都是waiting的状态,表示发生了死锁,而且下面还指出了死锁的具体的类。

网友评论