CompletableFuture<Object> cf = new CompletableFuture<>();
cf.whenComplete((t, throwable) -> {
System.out.println(Thread.currentThread().toString());
});
cf.complete(new Object());
这将在调用cf.complete()的线程中完成BiConsumer
回调时运行
当不从另一个线程调用commonPool()
时,如何在当前线程(cf.complete()
?)中没有完成/其他lambda时运行此命令?
答案 0 :(得分:2)
您无法在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池的线程中运行代码。