2016-10-21 2 views
4

Я только что прочитал the documentation около CompletableFuture::runAsync и был довольно смущен объяснением. Вот что там написано:Понимание CompletableFuture :: runAsync

Возвращает новый CompletableFuture, который асинхронно завершено к задаче, работающей в данном исполнителе после того, как работает данное действие.

Насколько я понимаю, CompletableFuture выглядит Future с, что он может «зарегистрировать» своего рода обратных вызовов и вызывать их неявно когда данное действие закончено.

Принимая это во внимание, давайте рассмотрим следующий код:

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

В этом коде мы зарегистрировать Runnable будет выполняться асинхронно в данной ThreadPool.

Но что это значит 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; 
} 

AsyncRun это асинхронно выполняется задача, которая, после запуска Runnable f, завершить CompletableFuture d асинхронно. Я не буду беспокоиться о коде здесь, потому что он не очень информативен, и он просто выполняет завершение d, вызывая его метод postComplete() (пакет-частный).