为什么CompletableFuture中的断点也停止在主线程中执行?

问题描述 投票:0回答:1

我正在尝试一个简单的代码片段,以检查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. 操作系统?
  5. [我正在Macbook Pro上使用处理器2.2 GHz Quad-Core Intel Core i7

为什么会这样?

我正在尝试一个简单的代码片段,以检查CompletableFuture是否确实在单独的线程中工作。类Scratch {public static void main(String [] args){CompletableFuture.runAsync(()-> ...

java multithreading intellij-idea parallel-processing completable-future
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.