CompletableFuture를 사용하여 Java 9에서 비동기 프로그래밍 및 동시성 제어를 구현하는 방법
소개:
현대 애플리케이션에서 고성능 및 높은 동시성에 대한 수요가 증가함에 따라 비동기 프로그래밍 및 동시성 제어는 개발에서 일반적인 문제가 되었습니다. Java 9에 도입된 CompletableFuture 클래스는 비동기 작업을 처리하는 강력한 메커니즘을 제공하고 동시성 제어를 구현하는 간단하고 우아한 방법을 제공합니다. 이 기사에서는 Java 9의 CompletableFuture의 기본 개념을 소개하고 CompletableFuture를 사용하여 비동기 프로그래밍 및 동시성 제어를 구현하는 방법을 보여주는 몇 가지 샘플 코드를 제공합니다.
1. CompletableFuture 소개
CompletableFuture는 Java 8에 도입된 비동기 프로그래밍 메커니즘을 보완한 것입니다. Future 및 CompletionStage 인터페이스를 구현하는 클래스입니다. Future 인터페이스는 완료되지 않을 수 있는 비동기 작업의 결과를 나타내는 데 사용되는 반면, CompletionStage 인터페이스는 비동기적으로 수행될 수 있는 계산(작업 트리거 및 결과 반환 포함)과 후속 작업을 표현하는 데 사용됩니다. 계산이 완료된 후 트리거됩니다. CompletableFuture 클래스는 이러한 인터페이스를 사용하는 단순화된 방법을 제공하고 비동기 작업을 처리하기 위한 보다 강력한 기능을 제공합니다.
2. 기본 사용 예
먼저 비동기 계산 결과를 나타내는 CompletableFuture 객체를 생성해야 합니다. CompletableFuture 클래스는completeFuture, SupplyAsync 등과 같은 객체를 생성하기 위한 다양한 정적 메서드를 제공합니다. 다음은 샘플 코드입니다.
CompletableFuture<String> future = CompletableFuture.completedFuture("Hello, CompletableFuture!");
위 코드에서는completeFuture 메서드를 사용하여 완성된 CompletableFuture 객체를 생성하고 이를 계산 결과로 문자열로 전달합니다.
다음으로 비동기 계산을 트리거하고 이를 이전 단계에서 생성된 CompletableFuture 개체와 연결해야 합니다. CompletableFuture 클래스는 이를 달성하기 위해 runAsync 및 SupplyAsync라는 두 가지 메서드를 제공합니다. 전자는 결과를 반환하지 않는 비동기 작업을 수행하는 데 사용되고, 후자는 결과를 반환하는 비동기 작업을 수행하는 데 사용됩니다. 다음은 샘플 코드입니다.
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> { // 异步计算,返回一个整数结果 return 42; });
위 코드에서는 SupplyAsync 메서드를 사용하여 정수 결과를 반환하는 비동기적으로 실행되는 계산을 생성합니다.
비동기 계산이 완료되면 CompletableFuture 객체의 메서드를 호출하여 계산 결과를 처리할 수 있습니다. CompletableFuture 클래스는 결과를 처리하기 위한 thenApply, thenAccept 등과 같은 다양한 메서드를 제공합니다. 샘플 코드는 다음과 같습니다.
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> { // 异步计算,返回一个整数结果 return 42; }); future.thenApply(result -> { // 处理结果并返回一个新的结果 return result * 2; }) .thenAccept(result -> { // 处理最终结果 System.out.println("Final result: " + result); });
위 코드에서는 비동기 계산이 완료된 후 결과를 처리하고 새로운 결과를 반환하기 위해 thenApply 메서드를 호출합니다. 그런 다음 최종 결과를 처리하고 인쇄하기 위해 thenAccept 메서드를 호출했습니다.
3. 동시성 제어 예제
CompletableFuture는 비동기 프로그래밍 외에도 동시성 제어를 구현하는 몇 가지 방법도 제공합니다. 가장 일반적으로 사용되는 방법에는 anyOf, allOf 및 Join이 있습니다.
anyOf 메소드는 여러 CompletableFuture 중 하나가 완료되기를 기다리는 데 사용됩니다. 첫 번째 완성된 CompletableFuture 객체의 결과를 평가하는 새로운 CompletableFuture 객체를 반환합니다. 다음은 샘플 코드입니다.
CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> { // 异步计算1 return 1; }); CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> { // 异步计算2 return 2; }); CompletableFuture<Object> resultFuture = CompletableFuture.anyOf(future1, future2); resultFuture.thenAccept(result -> { System.out.println("First result: " + result); });
위 코드에서는 anyOf 메소드를 사용하여 future1 또는 future2가 계산되기를 기다리고 결과를 인쇄합니다.
allOf 메소드는 여러 CompletableFutures의 모든 계산이 완료되기를 기다리는 데 사용됩니다. Void 값(null)으로 평가되는 새로운 CompletableFuture 객체를 반환합니다. 다음은 샘플 코드입니다.
CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> { // 异步计算1 return 1; }); CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> { // 异步计算2 return 2; }); CompletableFuture<Void> resultFuture = CompletableFuture.allOf(future1, future2); resultFuture.thenRun(() -> { System.out.println("All calculations are completed."); });
위 코드에서는 allOf 메서드를 사용하여 future1 및 future2의 모든 계산이 완료되기를 기다리고 완료 메시지를 인쇄합니다.
join 메소드는 CompletableFuture의 계산 결과를 기다리고 결과를 반환하는 데 사용됩니다. 계산 중에 예외가 발생하면 예외가 발생합니다. 다음은 샘플 코드입니다.
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> { // 异步计算,返回一个整数结果 return 42; }); int result = future.join(); System.out.println("Result: " + result);
위 코드에서는 조인 메서드를 사용하여 미래 계산이 완료되기를 기다리고 그 결과를 얻습니다.
요약:
이 기사에서는 Java 9의 CompletableFuture의 기본 개념을 소개하고 CompletableFuture를 사용하여 비동기 프로그래밍 및 동시성 제어를 구현하는 방법을 보여주는 몇 가지 샘플 코드를 제공합니다. CompletableFuture를 사용하면 간단하고 우아한 방식으로 비동기 작업을 처리하고 동시 계산을 유연하게 제어할 수 있습니다. 이 예제가 CompletableFuture를 이해하고 사용하는 데 도움이 되기를 바랍니다.
위 내용은 Java 9에서 비동기 프로그래밍 및 동시성 제어를 위해 CompletableFuture를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!