如何查看Java進程發生了死鎖?


運行一個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,

image-20210409122232936 image-20210409122313725

看這兩個線程互相鎖住的和阻塞的資源, 就能判斷發生了死鎖。

查看死鎖方法二:

使用jps命令先查看進程號

image-20210409122457224

然后運行jstack -l 2340

image-20210409122623738

如圖, 發生了死鎖。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM