我正在尝试一个简单的代码片段,以检查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()
线程应继续执行并打印所有控制台输出。但是实际上,两个线程中的执行都停止了,没有任何输出。
是因为它的本质)>
[我正在Macbook Pro上使用处理器2.2 GHz Quad-Core Intel Core i7
。
为什么会这样?
我正在尝试一个简单的代码片段,以检查CompletableFuture是否确实在单独的线程中工作。类Scratch {public static void main(String [] args){CompletableFuture.runAsync(()-> ...
因为这是IntelliJ的行为。如果有断点,请右键单击它,然后显示以下弹出窗口: