2016-10-21 4 views
4

私はちょうどthe documentationCompletableFuture::runAsyncを読んで、説明でかなり混乱しました。ここではそこに書かれているものです:CompletableFuture :: runAsyncについて

それが特定のアクションを実行した後、非同期に与えられたエグゼキュータで実行中の タスクによって完成された新しい CompletableFutureを返し

。それはコールバックのいくつかの並べ替えを「登録」し、特定のアクションが終了すると、暗黙的にそれらを呼び出すことができるように

は、私の知る限りそれを理解するよう、CompletableFutureFutureのように見えます。アカウントにこれを取る

は、以下のコードを考えてみましょう:このコードで

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

私たちは与えられたThreadPoolで非同期に実行されるようにRunnableを登録します。

しかし、それが何を意味する非同期タスクによって完成されCompletableFuture。どのようにすれば、タスクによってCompletableFutureが完成するのですか?それは私にはあまり意味がありません。

答えて

4

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; 
} 

AsyncRunRunnable fを実行した後、非同期CompletableFuture dを完了します非同期に実行されたタスクです。非常に有益ではないのでここではコードを気にしません。ちょうどそのpostComplete()メソッド(パッケージプライベート)を呼び出すことによってdの完了を実行します。

関連する問題