问题描述
在java程序中碰到运行未停止,如何证明是死循环还是死锁问题呢?可以使用Java中自带的命令jps -l
用来查看当前运行的进程号,在使用jstack 进程号
命令查看当前进程的堆栈信息
//死锁代码
class DeadLockRes {
private String lock1 = "lockAA";
private String lock2 = "lockBB";
public void m1() {
synchronized (lock1) {
System.out.println(Thread.currentThread().getName() + "\t正拥有" + lock1 + "锁");
System.out.println("试图拿到" + lock2);
synchronized (lock2) {
}
}
}
public void m2() {
synchronized (lock2) {
System.out.println(Thread.currentThread().getName() + "\t正拥有" + lock2 + "锁");
System.out.println("试图拿到" + lock1);
synchronized (lock1) {
}
}
}
}
jps
命令如下图:
jstack 进程号
命令如下图: