gpt4 book ai didi

java - 如何欺骗 CompletableFuture.complete() 在其他线程中运行依赖项/阶段?

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

CompletableFuture<Object> cf = new CompletableFuture<>();
cf.whenComplete((t, throwable) -> {
System.out.println(Thread.currentThread().toString());
});
cf.complete(new Object());

这将在调用 cf.complete() 的线程中的Complete 的 BiConsumer 回调时运行

当Complete/其他 lambda 不在当前线程中时(commonPool()?),同时调用 cf.complete() 来自其他线程?

最佳答案

您无法在 cd.complete() 级别执行此操作。唯一的方法是使用

cd.whenCompleteAsync()

并传递一个执行器作为第二个参数。

所以它看起来像这样:

Executor executor = Executors.newSingleThreadExecutor();
CompletableFuture<Object> cf = new CompletableFuture<>();
cf.whenCompleteAsync((t, throwable) -> {
System.out.println(Thread.currentThread().toString());
}, executor);
cf.complete(new Object());

编辑:我忘了提到,如果您不愿意,您不必创建自己的执行器。您可以简单地使用whenCompleteAsync() 而不使用第二个参数。然后它将在 ForkJoin 池的线程中运行代码。

关于java - 如何欺骗 CompletableFuture.complete() 在其他线程中运行依赖项/阶段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45571493/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com