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

标签 java completable-future

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/

相关文章:

java - 如何在 gwt 中使用 google app engine

java - 如何拒绝字符串和 double 输入?

Java CompletableFuture,什么时候调用 completableFuture.handle ?

java - cucumber JVM : Need to write Scenario name at start of each test

java - 每个方法/类的平均行数是多少?

Java Servlet 从一个 Servlet 重定向到另一个 Servlet,然后返回到初始 Servlet

java - 添加一层 thenApply 后出现不兼容类型 : bad return type in lambda expression X cannot be converted to CompetionStage<X>,

java - 何时使用 CompletableFuture 的非异步方法?

java - 有没有办法延迟可完成的 future 的执行?

kotlin - Kotlin 中 CompletableFuture 异常方法的使用