示例1:
CometableFuture
.supplyAsync(new MySupplier())
.someCompletableFutureMethod(new SomeCompletableFutureComsumer())
ForkJoin 线程是否会被阻塞?
示例2:
final CompletableFuture cf = new CompletableFuture();
cf = executor.execute(new Runnable(){
public void run(){
//do work
cf.complete(result);
}
});
cf.whenComplete(new MyConsumer());
涉及的任何踏板是否被堵塞?
(我知道,我应该使用 Callable 而不是 Runnable :)
有什么方法可以滥用 API,而不使用从 Future 继承的方法来阻止任何线程(main、ForkJoin、executor)?
假设我没有使用任何阻塞 API(我知道 future.get() block )。
最佳答案
CompletableFuture
添加了 join()
方法,这是 Future.get(某种的非检查异常版本)
(docs here)。
但我不建议使用它,因为如果不设置超时,它可能会挂起线程,并且您几乎总是可以使用 thenApply 和 friend 重写代码。
我尝试通过始终使用 CompletionStage
(CompletableFuture
实现)来强制执行此操作。
除了从 Future
block 继承的方法之外,我认为没有其他方法。
关于java - JDK8中的CompletableFutures什么时候会阻塞执行线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44798590/