深入理解Java虚拟机——可视化监控工具(Jconsole)线程死锁监控示例

x33g5p2x  于2022-02-19 转载在 Java  
字(0.9k)|赞(0)|评价(0)|浏览(183)

一、可视化监控工具(Jconsole)的使用

  • 参考lz此博文链接:可视化监控工具(Jconsole)的使用。

二、可视化监控工具(Jconsole)线程死锁监控示例

2.1、编写死锁代码示例并运行

  • 模拟死锁代码
/**
 * @description:
 * @author: xz
 */
public class DeadLock implements Runnable{
    private Object object1;
    private Object object2;

    public DeadLock(Object object1,Object object2){
        this.object1 =object1;
        this.object2 =object2;
    }

    @Override
    public void run() {
        synchronized (object1){
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            synchronized (object2){
                System.out.println("hello world");
            }
        }
    }
}
  • 运行死锁代码的测试类
public class DeadLockTest {
    public static void main(String[] args) {
        Object obj1 = new Object();
        Object obj2 = new Object();

        new Thread(new DeadLock(obj1,obj2)).start();

        new Thread(new DeadLock(obj2,obj1)).start();
    }
}
  • 启动测试类,因为死锁没有输出“hello world”,如下图:

2.2、启动可视化监控工具(Jconsole),查看线程情况

  • dos命令行窗口输入jconsole命令,弹出【Java监控和管理控制台】,如下图:

  • 查看Thread-0和Thread-1 线程情况,如下图:

  • 由上图可知:Thread-0线程等待,等待数量为1,拥有者为Thread-1;Thread-1线程等待,等待数量为1,拥有者为Thread-0;因此Thread-0和Thread-1造成死锁。

相关文章