Java 동시성 강화: CompletableFuture API 주요 개선 사항
CompletableFuture 클래스는 Java 8에서 값과 상태를 명시적으로 설정해 완료할 수 있는 Future를 나타내기 위해 도입되었습니다. java.util.concurrent.CompletionStage로 사용할 수 있으며, 미래 완료 시 트리거되는 종속 함수와 액션을 지원합니다. Java 9에서 CompletableFuture API가 더욱 개선되었습니다. 관련 변경 사항:
- 지연과 타임아웃 지원
- 서브클래싱 지원 개선
- 새로운 팩토리 메서드 추가
지연과 타임아웃 지원
public CompletableFuture<T> completeOnTimeout(T value, long timeout, TimeUnit unit)
주어진 타임아웃 전에 다른 방식으로 완료되지 않으면 이 CompletableFuture를 주어진 값으로 완료합니다.
public CompletableFuture<T> orTimeout(long timeout, TimeUnit unit)
주어진 타임아웃 전에 다른 방식으로 완료되지 않으면 이 CompletableFuture를 TimeoutException으로 예외적으로 완료합니다.
서브클래싱 지원 개선
public Executor defaultExecutor()
Executor를 지정하지 않은 비동기 메서드에 사용되는 기본 Executor를 반환합니다. 이 메서드는 서브클래스에서 오버라이드해 최소한 독립적인 스레드 하나를 제공하는 Executor를 반환할 수 있습니다.
public <U> CompletableFuture<U> newIncompleteFuture()
CompletionStage 메서드에서 반환될 타입의 새로운 불완전한 CompletableFuture를 반환합니다. CompletableFuture 클래스의 서브클래스는 이 메서드를 오버라이드해 이 CompletableFuture와 같은 클래스의 인스턴스를 반환해야 합니다. 기본 구현은 CompletableFuture 클래스의 인스턴스를 반환합니다.
새로운 팩토리 메서드
public static <U> CompletableFuture<U> completedFuture(U value)
주어진 값으로 이미 완료된 새로운 CompletableFuture를 반환하는 팩토리 메서드입니다.
public static <U> CompletionStage<U> completedStage(U value)
주어진 값으로 이미 완료된 새로운 CompletionStage를 반환하며, CompletionStage 인터페이스에 있는 메서드만 지원합니다.
public static <U> CompletionStage<U> failedStage(Throwable ex)
주어진 예외로 이미 예외적으로 완료된 새로운 CompletionStage를 반환하며, CompletionStage 인터페이스에 있는 메서드만 지원합니다.