CompletableFuture 시작 2 (CompletableFuture 만들기)
계속
CompletableFuture
그림과 같이
CompletableFurure
Future
, CompletionStage
인터페이스를 구현하고 있습니다.CompletionStage
는 Java8에서 도입된 인터페이스.CompletableFuture는 비동기 처리를 나타내며 사용 가능할 때 결과를 유지합니다.
Future와는 무엇이 다른가?
CompletableFuture
명시적으로 (그 값과 스테이터스를 설정해) 완료할 수 있는 Future입니다.
완료 시 발생하는 종속 함수와 동작을 지원하며 CompletionStage로 사용할 수 있습니다.
CompletableFuture@Oracle
이 「완료시에 발생하는 의존 함수 및 액션을 지원」이
CompletableFuture
의 큰 특징Future
의 특징인, 「시간이 걸리는 처리로 기다리는 일이 없어진다」에 더해,다음과 같은 일을 할 수 있다.
처리 결과를 사용할 수 있게 되면,
통지를 발행하거나, 람다 식이나 메소드 참조에 의해 정의된 콜백을 실행하거나 할 수 있다.
기본 사용법
public Future<Double> getDoubleAsync(String variable){
// 計算結果が保持されるCompletableFutureを作成
CompletableFuture<Double> futureValue = new CompletableFuture<>();
new Thread( () -> { // 別スレッドで処理を非同期で実行
try {
// 時間のかかる処理
double price = doSomeLongComputation(variable);
// 結果の値を設定
futureValue.complete(price);
} catch (Exception ex) {
futureValue.completeExceptionally(ex);
}
}).start();
// 計算を待つことなくFutureを返す
return futureValue;
}
위 메소드를 호출하는 방법
// 戻り値の型は、Future<Double>
Future<Double> futureValue = getDoubleAsync("test");
try {
// ここで呼び出す。値が利用可能となっていなければブロックされる
double value = futureValue.get();
System.out.printf("value is %.2f%n", value);
} catch (ExecutionException | InterruptedException e) {
throw new RuntimeException(e);
}
SupplyAsync를 사용하는 경우
CompletableFuture
클래스에는 여러 팩토리 메소드가 있습니다.supplyAsync(Supplier supplier)
ForkJoinPool.commonPool() 에서 실행되고 있는 태스크가 지정된 공급자를 호출해 취득한 값을 사용해 비동기적으로 완료하는 새로운 CompletableFuture 를 돌려줍니다.
supplyAsync@Oracke
public static Future<Double> getDoubleAsyncHandy(String arg) {
return CompletableFuture.supplyAsync(() -> doSomeLongComputation(arg));
}
supplyAsync
메소드를 사용하면 위와 같이 간단하게 CompletableFuture
를 쓸 수 있다.
Reference
이 문제에 관하여(CompletableFuture 시작 2 (CompletableFuture 만들기)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/koma_/items/dc7a4901794dc60f6445텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)