您当前的位置: 首页 >  Java

java持续实践

暂无认证

  • 1浏览

    0关注

    746博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Java多线程 定位死锁--ThreadMXBean

java持续实践 发布时间:2020-09-11 20:19:23 ,浏览量:1

文章目录
      • 定位死锁--ThreadMXBean

定位死锁–ThreadMXBean

使用ThreadMXBean 可以检测程序中出现死锁的线程, 获取该线程的相关信息. 做一些对应的操作.

相比较于jstack 在命令中查看. 此种写代码的方式, 能够在线程出现死锁的时候, 做一些对应的操作.

示例代码如下 :

package com.thread.deadlock;

import java.lang.management.ManagementFactory;
import java.lang.management.ThreadInfo;
import java.lang.management.ThreadMXBean;

/**
 * 类名称:ThreadMXBeanDetection
 * 类描述:  ThreadMXBean 检测死锁 
 *
 * @author: https://javaweixin6.blog.csdn.net/
 * 创建时间:2020/9/11 19:59
 * Version 1.0
 */
public class ThreadMXBeanDetection implements Runnable{
    //标记位, 不同的线程根据标记位执行不同的代码
    int flag = 1 ;

    //两把锁
    static Object o1 = new Object();
    static Object o2 = new Object();

    public static void main(String[] args) throws InterruptedException {
        ThreadMXBeanDetection r1 = new ThreadMXBeanDetection();
        ThreadMXBeanDetection r2 = new ThreadMXBeanDetection();
        //给不同的线程, 设置不同的标记位
        r1.flag=1;
        r2.flag=2;

        Thread t1 = new Thread(r1);
        Thread t2 = new Thread(r2);
        t1.start();
        t2.start();

        //让两个子线程执行
        Thread.sleep(1000);

        ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();

        //获取发生死锁的线程id数组
        long[] deadlockedThreads = threadMXBean.findDeadlockedThreads();

        //判断发生死锁的线程是否为空
        if (deadlockedThreads != null && deadlockedThreads.length > 0) {

            for (int i = 0; i             
关注
打赏
1658054974
查看更多评论
0.0410s