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/