運行一個Java程序, 發生了死鎖, 如何查看?
運行以下程序發生死鎖
public class DeadLockTest {
public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
synchronized (B.class) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (A.class) {
}
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
synchronized (A.class) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
synchronized (B.class) {
}
}
}
}).start();
}
}
class A {
}
class B {
}
查看死鎖方法一:
打開%JAVA_HOME%/bin/jconsole.exe
,


看這兩個線程互相鎖住的和阻塞的資源, 就能判斷發生了死鎖。
查看死鎖方法二:
使用jps
命令先查看進程號

然后運行jstack -l 2340

如圖, 發生了死鎖。