• (十一)使用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状态

     

  • 相关阅读:
    mysql报错排查总结
    java设计模式--外观模式
    java设计模式--策略模式
    java设计模式--策略模式
    java设计模式--简单工厂
    java设计模式--简单工厂
    国外有哪些比较好的IT社区
    使用jmeter进行性能测试-Jmeter教程及技巧汇总 (转)
    Fiddler环境配置教程
    Fiddler+Jmeter+断言详细教程
  • 原文地址:https://www.cnblogs.com/shyroke/p/8305731.html
Copyright © 2020-2023  润新知