死锁的原因:
a.系统资源不足
b.进程运行推进的
c.资源分配不 当
死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相 等待的现象
若无外力干涉那它们都将无法推进下去。
代码如下:
package cn.link.cn;
public class DealLockThread implements Runnable {
private String lockA;
private String lockB;
public DealLockThread(String lockA, String lockB) {
this.lockA = lockA;
this.lockB = lockB;
}
@Override
public void run() {
synchronized (lockA){
System.out.print(Thread.currentThread().getName()+"\t自己持有"+lockA+"\t尝试获取"+lockB);
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lockB){
System.out.print(Thread.currentThread().getName()+"\t自己持有"+lockB+"\t尝试获取"+lockA);
}
}
}
/**
* @Description: java类作用描述
* @Author: zhaohaiming
* @CreateDate: 2019/8/5 21:42
* @Version: 1.0
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String lockA = "lookA";
String lockB = "lookB";
new Thread(new DealLockThread(lockA,lockB),"ThreadAAA").start();
new Thread(new DealLockThread(lockB,lockA),"ThreadBBB").start();
}
}
运行结果导致死锁
排查解决方法
1.jsp -l 命令定位进程号
2.jstack + 进程号 找到死锁查看。
3. jinfo -flag PrintGCDetails -52552
表示已开启:
-XX:+PrintGCDetails