IDEA debug模式的多线程调试

本文介绍如何使用debug模式观察多线程程序中线程的状态变化,特别是在加锁情况下的线程行为。通过一个具体例子展示了如何设置断点,并配置debug模式以观察线程在获取锁时的状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

debug模式下,观察多线程执行过程和状态

场景如下:在加锁的情况下,观察线程状态

public class DebugDemo {
	// 锁
    private Object lock = new Object();

	// 执行方法 互斥
    public void execute() {
        synchronized (lock) {
            String name = Thread.currentThread().getName();
            System.out.println(name + " Hello World!");
        }
    }
	
	// 启动3个线程,3个线程持有同一个DebugDemo对象
    public static void main(String[] args) {
        DebugDemo demo = new DebugDemo();
        Thread t1 = new Thread(new Task(demo), "t1");
        Thread t2 = new Thread(new Task(demo), "t2");
        Thread t3 = new Thread(new Task(demo), "t3");
        t1.start();
        t2.start();
        t3.start();
    }
	
	// 线程实体
    static class Task implements Runnable {
        private DebugDemo demo;
        public Task(DebugDemo demo) {
            this.demo = demo;
        }
        @Override
        public void run() {
            demo.execute();
        }
    }
}

打上断点,右键断点的位置打开设置,选择【Thread】再点击【Make Default】。
【All】:第一个线程到达这里,立马阻塞。
【Thread】:不同的线程可以并发到这里。因为加了锁,其他线程会是MONITOR状态。
在这里插入图片描述
在这里插入图片描述
debug模式运行程序,观察线程状态。
如图可见,线程t2抢到锁,处于RUNNING状态,t1和t3在等待t2释放锁资源
在这里插入图片描述
其他设置:比如在该断点,我们并不关心线程t1,t1可以通过此断点,其他线程需要触发断点,可以在设置界面这样配置
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值