IDEA debug模式的多线程调试

    科技2022-07-10  130

    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可以通过此断点,其他线程需要触发断点,可以在设置界面这样配置

    Processed: 0.017, SQL: 8