了解CompletableFuture :: runAsync

时间:2016-10-21 09:52:06

标签: java multithreading java-8 completable-future

我刚刚阅读了关于CompletableFuture::runAsync的{​​{3}},并对解释感到非常困惑。这是在那里写的:

  

返回由a异步完成的新CompletableFuture   在运行给定操作后,在给定执行程序中运行的任务。

据我了解,CompletableFuture看起来像Future,它可以“注册”某种回调并在给定的动作完成后隐式调用它们。

考虑到这一点,让我们考虑以下代码:

ExecutorService threadsPool;
Runnable r;
//...
CompletableFuture.runAsync(r, threadsPool);

在此代码中,我们注册要在给定Runnable中异步执行的ThreadPool

但是什么意味着 CompletableFuture由任务异步完成 。该任务如何使CompletableFuture完成......?这对我来说没什么意义。

1 个答案:

答案 0 :(得分:5)

CompletableFuture内,runAsync调用了以下代码。

static CompletableFuture<Void> asyncRunStage(Executor e, Runnable f) {
    if (f == null) throw new NullPointerException();
    CompletableFuture<Void> d = new CompletableFuture<Void>();
    e.execute(new AsyncRun(d, f));
    return d;
}

AsyncRun是异步执行的任务,在运行Runnable f之后,将异步完成CompletableFuture d。我不打算在这里使用代码,因为它不是非常有用,它只是通过调用d方法(包私有)来执行postComplete()的完成。