(十一)使用Jconsole監控線程


一、案例

  • 監控線程情況,包括阻塞、死循環等

  1.1  代碼如下,下述代碼共有三個線程,Main、mythread01、mythread02線程,其中mythread01線程為死循環、mythread02為阻塞線程

package jvm;

import java.util.Scanner;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class JStackTest {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        sc.next();

        /**
         * 該線程死循環
         */
        new Thread(new Runnable() {

            @Override
            public void run() {
                while (true) {

                }

            }
        }, "mythread01").start();

        sc.next();

        /**
         * 該線程阻塞
         */
        testWait(new Object());

    }

    private static void testWait(Object obj) {
        new Thread(new Runnable() {

            @Override
            public void run() {

                synchronized (obj) {
                    try {
                        obj.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }

            }
        }, "mythread02").start();

    }
}

 

  • 運行程序,打開jconsole,結果如下圖,此時只有main線程,且該線程狀態為Runable,main線程阻塞因為正在等待用戶輸入(sc.next();)。

 

  • 在console輸入一次之后,如下圖

  • 再查看jconsole,結果如下,發現多了一個mythread01線程,且該線程也為Runable狀態,查看代碼發現該線程是死循環所以阻塞。

 

 

  •  再在console輸入一次,如下圖

 

  • 再查看jconsole,結果如下,main線程已經執行完畢了,所以消失了。mythread01線程還在執行(死循環),多了mythread02線程,該線程為WATING狀態

 

 


免責聲明!

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



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