Java Flight Recording 不报告 Java Mission Control 中的 DeadLock

问题描述

我试图模拟我将使用 Java Flight Recorder 记录并使用 Java Mission Control 检查的死锁情况。

由于某种原因,线程部分下的阻塞线程没有被标记为阻塞,Java Mission Control 部分中的自动分析也没有报告死锁情况

同时,收集到的线程转储清楚地表明线程被阻塞并发现了 1 个死锁

public class ExternalDeadLock {

    private static Lock lock1 = new reentrantlock();
    private static Lock lock2 = new reentrantlock();

    static Runnable task1 = () -> {
        while(true) {
           try {
               lock1.lock();
               sleep();
               lock2.lock();

               System.out.println("task 1 still running");

           } finally {
               lock1.unlock();
               lock2.unlock();
           }
        }
    };

    static Runnable task2 = () -> {
        while(true) {
            try {
                lock2.lock();
                sleep();
                lock1.lock();

                System.out.println("task 2 still running");

            } finally {
                lock1.unlock();
                lock2.unlock();
            }
        }
    };

    private static void sleep() {
        try {
            Thread.sleep(100);
        }
        catch (InterruptedException e) {
            e.printstacktrace();
        }
    }

    public static void main(String[] args) throws InterruptedException {
        Scanner scanner = new Scanner(system.in);

        System.out.println("Press enter to initiate dead lock");
        scanner.nextLine();

        ExecutorService executor = Executors.newCachedThreadPool();

        executor.submit(task1);
        executor.submit(task2);

        executor.awaitTermination(10000,TimeUnit.DAYS);

    }
}

我使用所有认设置的标准“分析”指标预设。

我试图了解我哪里做错了,导致 Java Mission Control 中的死锁情况如此不明显

Blocked thread looks as active Thread dump detects deadlock

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)