gpt4 book ai didi

java - CompletableFuture 阻塞主线程

转载 作者:行者123 更新时间:2023-11-30 06:46:26 30 4
gpt4 key购买 nike

我知道 CompletableFuture 中的 get() 方法会阻塞线程,但是我怎样才能执行 System.out.println("xD")Future 正在处理,因为现在这个语句在 CompletableFuture 完成时执行。

import java.util.concurrent.*;
import java.util.stream.Stream;

public class CompletableFutureTest {


public static void main(String[] args) throws ExecutionException, InterruptedException {
CompletableFuture.supplyAsync(CompletableFutureTest::counting).whenComplete((result, exception) -> {
if (exception != null) {
System.out.println(result);
} else {
}
}).get();

System.out.println("xD");
}


public static int counting() {

Stream.iterate(1, integer -> integer +1).limit(5).forEach(System.out::println);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return 10;
}
}

最佳答案

您应该在打印语句之后移动 get()
这样,将在评估 future 的值时执行打印。

public static void main(String[] args) throws ExecutionException, InterruptedException {
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(CompletableFutureTest::counting).whenComplete((result, exception) -> {
if (exception != null) {
System.out.println(result);
} else {
}
});

System.out.println("xD");
Integer value = future.get();
}

关于java - CompletableFuture 阻塞主线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47554231/

30 4 0