我刚刚阅读了关于CompletableFuture::runAsync
的{{3}},并对解释感到非常困惑。这是在那里写的:
返回由a异步完成的新
CompletableFuture
在运行给定操作后,在给定执行程序中运行的任务。
据我了解,CompletableFuture
看起来像Future
,它可以“注册”某种回调并在给定的动作完成后隐式调用它们。
考虑到这一点,让我们考虑以下代码:
ExecutorService threadsPool;
Runnable r;
//...
CompletableFuture.runAsync(r, threadsPool);
在此代码中,我们注册要在给定Runnable
中异步执行的ThreadPool
。
但是什么意味着 CompletableFuture
由任务异步完成 。该任务如何使CompletableFuture
完成......?这对我来说没什么意义。
答案 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()
的完成。