簡單使用jconsole來檢測死鎖


jconsole來檢測死鎖是很方便的,當然也有更多其他功能,這裏做一下簡單演示,後邊還會繼續補充!

產生死鎖代碼

代碼:

package worktest;

/**
 * @author jeffSmile
 * @date 2020-04-28 上午 10:32
 * @desc 死鎖
 */
public class DeadLock {

    private static Object resourceA = new Object();
    private static Object resourceB = new Object();

    public static void main(String[] args) {
        Thread threadA = new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (resourceA){
                    System.out.println(Thread.currentThread()+"  get ResourceA");
                    try{
                        Thread.sleep(1000);
                    }catch (InterruptedException e){
                        e.printStackTrace();
                    }
                    System.out.println(Thread.currentThread()+"  waiting ResourceB");
                    synchronized (resourceB){
                        System.out.println(Thread.currentThread()+"  get ResourceB");
                    }
                }
            }
        });

        Thread threadB = new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (resourceB){
                    System.out.println(Thread.currentThread()+"  get ResourceB");
                    try{
                        Thread.sleep(1000);
                    }catch (InterruptedException e){
                        e.printStackTrace();
                    }
                    System.out.println(Thread.currentThread()+"  waiting ResourceA");
                    synchronized (resourceA){
                        System.out.println(Thread.currentThread()+"  get ResourceA");
                    }
                }
            }
        });

        threadA.start();
        threadB.start();
    }
}

運行後代碼就卡在這了!
在這裏插入圖片描述

運行Jconsole

接下來我們用jdk自帶的jconsole來檢測下死鎖的狀態!

  • 進入D:\Java\jdk1.8.0_201\bin
    在這裏插入圖片描述
  • 選擇需要監控的本地進程:
    在這裏插入圖片描述

Jconsole界面功能介紹

概覽

  • 概覽中顯示的是虛擬機主要運行數據的情況,包括“堆內存使用情況”、“線程”、”類“、“Cpu使用情況”
    在這裏插入圖片描述

內存

內存監控相當於是jstat的可視化命令,用於監控虛擬機內存(主要是java堆和永久代)的變化趨勢。
在這裏插入圖片描述

線程

線程標籤頁相當於是jstack命令的可視化,
在這裏插入圖片描述

類標籤主要查看加載的類的數量

  • 在這裏插入圖片描述

檢測死鎖:

在這裏插入圖片描述
可以看到thread-1和thread-0形成了死鎖

可以看到thread-1和thread-0形成了死鎖!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章