java 查看線程死鎖


 那我們怎么確定一定是死鎖呢?有兩種方法。

  1>使用JDK給我們的的工具JConsole,可以通過打開cmd然后輸入jconsole打開。

    1)連接到需要查看的進程。

2)打開線程選項卡,然后點擊左下角的“檢測死鎖”

    3)jconsole就會給我們檢測出該線程中造成死鎖的線程,點擊選中即可查看詳情:

     從上圖中我們可以看出:

      ①在線程Thread-1中,從狀態可以看出,它想申請Paper這個資源,但是這個資源已經被Thread-0擁有了,所以就堵塞了。

      ②在線程Thread-0中,從狀態可以看出,它想申請Pen這個資源,但是這個資源已經被Thread-1擁有了,所以就堵塞了。

    Thread-1一直等待paper資源,而Thread--一直等待pen資源,於是這兩個線程就這么僵持了下去,造成了死鎖。

  2>直接使用JVM自帶的命令

    1)首先通過 jps 命令查看需要查看的Java進程的vmid,如圖,我們要查看的進程TestDeadLock的vmid號是7412;

    

    2)然后利用 jstack 查看該進程中的堆棧情況,在cmd中輸入 jstack -l 7412 ,移動到輸出的信息的最下面即可得到:

    

    至此,相信大家都會看了吧,具體就不說啦,根據輸出,找到問題所在的代碼,開始調試解決即可啦。


免責聲明!

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



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