在 intellij 2020.1 中,当我在调试器中点击播放时,如何阻止它切换线程? (不重复)

In intellij 2020.1, when I hit play in debugger, how to stop it from switching threads? (not duplicate)

这个问题我可能没说清楚


所以它被标记为重复

switching between threads in Intellij Idea

但我这样做了,并将我的断点暂停策略更改为 'Thread'。这根本没有改变行为,所以我现在在这里提供代码。

这是我的测试代码

public class TestDebugger {
    private static final Logger log = LoggerFactory.getLogger(TestDebugger.class);
    private Executor exec = Executors.newFixedThreadPool(5);

    public static void main(String[] args) throws InterruptedException {
        new TestDebugger().start();

        Thread.sleep(10000000);
    }

    private void start() {
        Runnable r = new Runnable() {
            @Override
            public void run() {
                log.info("logger BREAKPOINT A thread="+Thread.currentThread().getName());
                log.info("logger A");

                log.info("logger A");
                log.info("logger A");
                log.info("logger A");
                log.info("logger A");
                log.info("logger A");
                log.info("logger BREAKPOINT B"+Thread.currentThread().getName());

            }
        };

        exec.execute(r);
        exec.execute(r);
        exec.execute(r);
    }
}

我启动程序,线程 1、2、3 都停在断点 A 上。这部分很好。然后我在线程 1 上按下播放按钮,在我背后,它切换了线程!!!这是非常烦人的,也是不希望的。事实上,我觉得这里的 eclipse 调试器工作得更好,因为这是默认行为。

事实上,如果我为所有 3 个线程点击播放 6 次,这就是日志...

注意:如果我删除了中间的其他日志语句,它会像我预期的那样再次开始工作......很奇怪

INFO: logger BREAKPOINT A thread=pool-2-thread-1
INFO: logger BREAKPOINT A thread=pool-2-thread-3
INFO: logger BREAKPOINT Bpool-2-thread-3
INFO: logger BREAKPOINT Bpool-2-thread-1
INFO: logger BREAKPOINT A thread=pool-2-thread-2
INFO: logger BREAKPOINT Bpool-2-thread-2

前两个日志应该都是线程 1,但实际上是线程 1,然后是线程 3....grrrr。无论如何要让它工作?

谢谢, 院长

此行为是设计使然,目前无法更改。资料来源:负责 IntelliJ IDEA 调试器的开发人员。