【问题标题】:Why does a breakpoint in CompletableFuture stops execution in Main thread as well? [duplicate]为什么 CompletableFuture 中的断点也会停止主线程中的执行? [复制]
【发布时间】:2020-04-12 12:29:21
【问题描述】:

我正在尝试一个简单的代码 sn-p 来检查 CompletableFuture 是否在单独的线程中工作。

class Scratch {
    public static void main(String[] args) {

        CompletableFuture.runAsync(() -> {
            // method call or code to be asynch.
            new Worker().work();
        });
        for (int i = 0; i < 100; i++) {
            System.out.println("Main : " + i);
        }
    }

    private static class Worker {
        public void work() {
            for (int i = 0; i < 100; i++) {
                System.out.println("Worker : " + i);
            }
        }
    }
}

看起来,它们似乎通过控制台输出并行工作

Worker : 0
Main : 0
Worker : 1
Main : 1
Worker : 2
Main : 2
Worker : 3
Main : 3
Worker : 4
Main : 4
Worker : 5
Main : 5
Worker : 6
Main : 6
Worker : 7
Main : 7
Worker : 8

还有更多行。

当我在work() 方法中设置断点时,就会出现混乱。理想情况下,一旦work() 中的行被击中,CompletableFuture 线程中的执行就会停止并且意味着main() 线程应该继续执行并打印所有控制台输出。但实际上,两个线程中的执行都停止了,并且没有任何输出。

是不是因为很自然

  1. Java?
  2. IntelliJ?
  3. 处理器?
  4. 操作系统?

我在 Macbook Pro 上使用处理器 2.2 GHz Quad-Core Intel Core i7

为什么会这样?

【问题讨论】:

  • 是的。我已将答案标记为已接受。
  • 在这种情况下,您也可以接受重复的提案,因为它可以帮助其他人找到最佳答案????
  • @DidierL 你想让我把它标记为重复吗?
  • @DidierL 我同意这两个问题都有相同的解决方案。但不同的问题,它将帮助那些甚至不知道问题出在语言、操作系统还是 IDE 的人。

标签: java multithreading intellij-idea parallel-processing completable-future


【解决方案1】:

这是因为这是 IntelliJ 的行为。如果您有断点,请右键单击它,它会显示以下弹出窗口:

Suspend 下,您会看到如果您到达该断点,所有线程都将停止。您还可以选择仅停止当前线程。

【讨论】:

    猜你喜欢
    • 2017-03-08
    • 1970-01-01
    • 2019-12-06
    • 1970-01-01
    • 2020-08-31
    • 2021-03-31
    • 1970-01-01
    • 2021-02-20
    • 2011-11-16
    相关资源
    最近更新 更多