• 使用Java提供的MXBean来监控jvm创建了哪些线程


    MBean是一种JavaBean,MBean往往代表的是JMX中的一种可以被管理的资源。MBean会通过接口定义,给出这些资源的一些特定操作:

    属性的读和写操作

    可以被执行的操作

    关于自己的描述信息

    MXBean是一种特殊的MBean,不仅特殊在名字不一样,主要是在于在接口中会引用到一些其他类型的类时,其表现方式的不一样。在MXBean中,如果一个MXBean的接口定义了一个属性是一个自定义类型,如果MXBean定义了一种自定义的类型,当JMX使用这个MXBean时,这个自定义类型就会被转换成一种标准的类型,这些类型被称为开放类型,是定义在javax.management.openmbean包中的。

    而这个转换的规则是,如果是原生类型,如int或者是String,则不会有变化,但如果是其他自定义类型,则被转换成CompositeDataSupport类,这样,JMX调用这个MXBean提供的接口的时候,classpath下没有这个自定义类型也是可以调用成功的,但是换做MBean,则调用发的classpath下必须存在这个自定义类型的类定义

    java本身提供了一些关于线程,内存,垃圾回收和日志等管理的MXBean和一个ManagementFactory的静态工厂类,通过这些事先提供的类,我们可以监控java进程的线程创建,内存日志级别和垃圾回收等,当然,我们也可以通过创建我们自己的MXBean来实现我们想实现的一些功能

    以下的例子,展示了如何使用java自身提供的MXBean来监控一个简单的java程序启动的过程中启动了哪些java线程

    import java.lang.management.ManagementFactory;
    import java.lang.management.ThreadInfo;
    import java.lang.management.ThreadMXBean;
    
    public class MXBeanDemo {
        public static void main(String[] args) {
            System.out.println("below is thread info:");
            ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
            long[] threadIds = threadMXBean.getAllThreadIds();
            ThreadInfo[] threadInfos = threadMXBean.getThreadInfo(threadIds);
            for (ThreadInfo threadInfo : threadInfos) {
                System.out.println(threadInfo.getThreadId()+": "+threadInfo.getThreadName());
            }
        }
    }
    

    输出的信息如下:

    我们可以看到:除了main线程之外,jvm还创建了其他的四个线程,使用了IntellijIDEA的话,还会创建 一个名为Monitor Ctrl-Break的线程

  • 相关阅读:
    面向对象的程序设计-2-创建对象
    面向对象的程序设计-1-理解对象
    react组件的生命周期
    react-router 组件式配置与对象式配置小区别
    mobx @computed的解读
    十分钟介绍mobx与react
    less学习
    git-简单流程(学习笔记)
    几种视频编码器的编译及使用方法
    一位程序员工作10年总结的13个忠告
  • 原文地址:https://www.cnblogs.com/jiaoyiping/p/9250668.html
Copyright © 2020-2023  润新知