2016-10-21 4 views
4

방금 ​​the documentationCompletableFuture::runAsync을 읽었으며 설명으로 꽤 혼란 스러웠습니다. 여기가 어떻게 쓰여있다 : 그것은 주어진 작업을 실행 한 후CompletableFuture :: runAsync의 이해

비동기 적으로 지정된 executor에에서 실행되는 작업에 의해 완성되는 새로운 CompletableFuture를 돌려줍니다. 이 콜백의 일종 "등록"주어진 작업이 완료되면 암시를 호출 할 수와

는 지금까지 내가 그것을 이해, CompletableFutureFuture 것 같습니다. 계정에 그 촬영

,의 다음 코드를 살펴 보자 :이 코드에서

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

AsyncRunRunnable f를 실행 한 후, 비동기 CompletableFuture d을 완료 할 비동기 적으로 실행되는 작업입니다. 매우 유익한 정보가 아니기 때문에이 코드를 신경 쓰지 않고 단지 d 메서드를 완료하여 (패키지 전용 클래스) postComplete() 메서드를 호출하면됩니다.