CompletableFuture<Object> cf = new CompletableFuture<>();
cf.whenComplete((t, throwable) -> {
System.out.println(Thread.currentThread().toString());
});
cf.complete(new Object());
这将在调用cf.complete()的线程中的Complete的
BiConsumer
回调时运行当未在当前线程(
commonPool()
?)中完成/其他lambda,而未从其他线程调用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池的线程中运行代码。