需要在幕后详细说明supplyAsync和CompletableFuture的whenComplete方法

时间:2019-03-19 05:52:21

标签: java multithreading java-8 threadpool completable-future

我正在寻找CompletableFuture的JAVA API文档,我在其中遇到了这一特定行,

  

为非异步方法的相关完成提供的操作可以由完成当前CompletableFuture的线程执行,也可以由完成方法的任何其他调用者执行。

     

引用链接说明(https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html

我对这个特定的短语感到困惑:“或由其他任何使用完成方法的人调用”

问题1)这实际上是什么意思?因此,我怀疑何时Complete将执行相同的线程,否则是否有机会进入不同的线程?

我已经将CompletableFuture与它的supplyAsync()/ runAsync()和whenComplete()方法一起使用。()

CompletableFuture.supplyAsync(
    () -> {DO_SOMETHING}, myExecutor
).whenComplete((result, exception) -> {DO_SOMETHING});

对于supplyAsync()/ runAsync(),我使用了Executor服务。之后,该方法(supplyAsync / runAsync)的结果将深入到whenComplete()方法中。

所以问题是: Q2)什么时候完成将始终使用立即使用后supplyAsync / runAsync使用的同一线程?

(如果whenComplete()方法在supplyAsync()/ runAsync()方法时从我的执行器启动的同一线程中执行。)

0 个答案:

没有答案