java如何檢視死鎖
阿新 • • 發佈:2018-12-15
首先我們先寫一個死鎖程式
public class DeadLock { public static void main(String[] args) { new Thread(new Runnable() { @Override public void run() { synchronized (A.class){ System.out.println(Thread.currentThread().getName()+"持有了A類鎖"); try { Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (B.class){ System.out.println(Thread.currentThread().getName()+"持有了B類鎖"); } } } }).start(); new Thread(new Runnable() { @Override public void run() { synchronized (B.class){ System.out.println(Thread.currentThread().getName()+"持有了B鎖"); synchronized (A.class){ System.out.println(Thread.currentThread().getName()+"持有了A鎖");} } } }).start(); } } class A{} class B{}
程式碼思路:先用執行緒1去獲得A類鎖然後執行緒2獲得B類鎖,此時再去執行執行緒1去獲得B類鎖,發現無法獲得,跳到執行緒2去獲得A類鎖也無法獲得。形成死鎖迴圈
程式無法終止
我們開啟java 安裝地址開啟bin目錄
開啟後
有一個死鎖 點開:
我們發現綠色箭頭是752cea90物件也就是我們執行緒1想要獲得物件,而執行緒0佔有
紅色箭頭是7a4556dd物件是我們目前佔有的
看看執行緒0的剛好和執行緒1的相反,形成死鎖。