跳至正文
来两杯美式
返回

IDEA 多线程debug干预线程执行顺序

By 来两杯美式
发布于更新于

有时候我们往往遇到这种问题:想在本地学习或者测试多线程代码,想人工干预线程执行顺序,可能使用Thread.sleep(),join()等方式,又或者我的代码在本地测试好好地,一到线上就可能出现各种问题,如果排查到是因为多线程引起的问题,那么我们怎么能在测试环境复现问题,模拟相同的执行顺序呢?这个时候IDEA自带的多线程debug可能能帮得到我们

问题背景

贴上一段简单代码,启动三个线程,分别输出’a’,‘b’,‘c’

public class TestDebug {
    public static void main(String[] args) {
        Thread t1 = new Thread(() ->
            System.out.println("a")
        );
        Thread t2 = new Thread(() ->
            System.out.println("b")
        );
        Thread t3 = new Thread(() ->
            System.out.println("c")
        );

        t1.start();
        t2.start();
        t3.start();
    }
}

输出结果每次不尽相同,什么顺序都有可能。现在的需求是依次输出 a b c

要怎么做呢?可以使用IDEA自带的多线程debug。

首先,把需要干预的地方打断点

打断点截图

然后在断点上右键,就可以把断点设置为线程模式啦

设置断点为线程模式

debug执行程序,然后就能看到被阻塞的各个线程,然后选择该线程,再操作下一步下一步即可。

查看被阻塞的线程


分享这篇文章:
通过邮件分享这篇文章✓ 链接已复制
查看系列全部文章
  1. 01.java 中的 i++ 与 ++i 分析
  2. 02.从字节码分析Java的方法重写和重载
  3. 03.基于atomic包分析CAS原理
  4. 04.ThreadLocal分析其弱引用和可能引起的内存泄漏
  5. 05.Java并发模型交锋:Netty响应式 vs 虚拟线程
  6. 06.IDEA 多线程debug干预线程执行顺序
  7. 07.突破 JVM 物理边界:高性能网络 I/O 与底层零拷贝机制

上一篇
Git 知识系列(一):安装与基础配置
下一篇
java 中的 i++ 与 ++i 分析