package com.Test;
import jdk.internal.dynalink.linker.LinkerServices;
import org.omg.CORBA.Current;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Currency;
import java.util.List;
/**
* @author ZFX
* @date2019/5/18 9:47.
*/
class shareModel implements Runnable{
private String lockA;
private String lockB;
public shareModel(String lockA,String lockB){
this.lockB=lockB;
this.lockA=lockA;
}
@Override
public void run() {
synchronized (lockA){
System.out.println("等待A");
try {
Thread.sleep(1000);//获取死锁的效果明显
synchronized (lockB){
System.out.println("获取锁B");
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class test {
public static void main(String[] args) {
String lockA = "lockA";
String lockB = "lockB";
new Thread(new shareModel(lockA,lockB),"VVVVV").start();
new Thread(new shareModel(lockB,lockA),"BBBBB").start();
}
}
上面是简单的手写死锁的代码
死锁的线上排查方法
jps -l 查找正在运行的java程序的pid
jastack -pid 就能查到死锁的位置