CompletableFuture는 java.util.concurrent 패키지의 일부이며 더 읽기 쉽고 유지 관리하기 쉬운 방식으로 비동기 비차단 코드를 작성하는 방법을 제공합니다. 이는 비동기 계산의 향후 결과를 나타냅니다.
CompletableFuture로 시작하려면 간단한 비동기 작업을 생성할 수 있습니다. 예는 다음과 같습니다.
import java.util.concurrent.CompletableFuture; public class CompletableFutureExample { public static void main(String[] args) { CompletableFuture<Void> future = CompletableFuture.runAsync(() -> { System.out.println("Running asynchronously..."); // Simulate a long-running task try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } }); future.join(); // Wait for the task to complete System.out.println("Task completed."); } }
데모 결과:
Running asynchronously... Task completed.
CompletableFuture를 사용하여 비동기 작업의 결과를 반환할 수도 있습니다.
import java.util.concurrent.CompletableFuture; public class CompletableFutureWithResult { public static void main(String[] args) { CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> { // Simulate a computation return 5 * 5; }); future.thenAccept(result -> { System.out.println("The result is: " + result); }).join(); } }
데모 결과:
The result is: 25
여러 비동기 작업을 처리하는 것이 일반적인 사용 사례입니다. CompletableFuture는 미래를 결합하는 여러 가지 방법을 제공합니다.
여러 CompletableFutures의 결과를 결합할 수 있습니다.
import java.util.concurrent.CompletableFuture; public class CombiningFutures { public static void main(String[] args) { CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> 5); CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> 10); CompletableFuture<Integer> combinedFuture = future1.thenCombine(future2, (result1, result2) -> result1 + result2); combinedFuture.thenAccept(result -> { System.out.println("Combined result: " + result); }).join(); } }
데모 결과:
Combined result: 15
여러 future가 완료될 때까지 기다려야 하는 경우 CompletableFuture.allOf():
를 사용하세요.
import java.util.concurrent.CompletableFuture; public class AllOfExample { public static void main(String[] args) { CompletableFuture<Void> future1 = CompletableFuture.runAsync(() -> { // Simulate task try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } }); CompletableFuture<Void> future2 = CompletableFuture.runAsync(() -> { // Simulate another task try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } }); CompletableFuture<Void> allOfFuture = CompletableFuture.allOf(future1, future2); allOfFuture.join(); System.out.println("All tasks completed."); } }
데모 결과:
All tasks completed.
비동기 프로그래밍에서는 오류 처리가 필수적입니다. CompletableFuture는 예외를 관리하는 방법을 제공합니다.
비동기 작업에서 예외를 처리하려면 예외적으로()를 사용하세요.
import java.util.concurrent.CompletableFuture; public class ExceptionHandlingExample { public static void main(String[] args) { CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> { throw new RuntimeException("Something went wrong!"); }).exceptionally(ex -> { System.out.println("Exception occurred: " + ex.getMessage()); return null; }); future.join(); } }
데모 결과:
Exception occurred: Something went wrong!
이 가이드에서는 CompletableFuture를 사용하여 Java에서 동시 요청을 처리하는 방법을 살펴보았습니다. 간단한 비동기 작업 생성부터 여러 future 결합 및 오류 처리에 이르기까지 CompletableFuture는 비동기 프로그래밍에 대한 강력하고 유연한 접근 방식을 제공합니다.
질문이 있거나 추가 도움이 필요하시면 아래에 댓글을 남겨주세요. 기꺼이 도와드리겠습니다!
에서 더 많은 게시물 읽기: Handling Multithreading in Java with Completable Future
위 내용은 Completable Future를 사용하여 Java에서 멀티스레딩 처리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!