【发布时间】: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() 线程应该继续执行并打印所有控制台输出。但实际上,两个线程中的执行都停止了,并且没有任何输出。
是不是因为很自然
- Java?
- IntelliJ?
- 处理器?
- 操作系统?
我在 Macbook Pro 上使用处理器 2.2 GHz Quad-Core Intel Core i7。
为什么会这样?
【问题讨论】:
-
是的。我已将答案标记为已接受。
-
在这种情况下,您也可以接受重复的提案,因为它可以帮助其他人找到最佳答案????
-
@DidierL 你想让我把它标记为重复吗?
-
@DidierL 我同意这两个问题都有相同的解决方案。但不同的问题,它将帮助那些甚至不知道问题出在语言、操作系统还是 IDE 的人。
标签: java multithreading intellij-idea parallel-processing completable-future