>  기사  >  Java  >  Java에서 CompletableFuture를 사용하여 모든 요소가 처리될 때 알리는 방법

Java에서 CompletableFuture를 사용하여 모든 요소가 처리될 때 알리는 방법

王林
王林원래의
2023-06-26 15:57:11834검색

Java의 CompletableFuture는 비동기 처리 중에 작업 전달, 처리, 알림 및 기타 작업을 수행하는 데 도움이 되어 비동기 프로그래밍의 어려움을 크게 단순화할 수 있습니다. 비동기 처리를 위해 CompletableFuture를 사용하는 경우 모든 요소가 처리된 후 이를 알려야 하는 시나리오가 있습니다. 이 기사에서는 이 시나리오를 구현하기 위해 Java에서 CompletableFuture를 사용하는 방법을 소개합니다.

우선 CompletableFuture의 기본 개념과 사용법을 이해해야 합니다. CompletableFuture는 작업을 비동기적으로 수행할 때 결과를 처리하는 방법을 제공하는 Java 8의 새로운 클래스입니다. 이를 통해 여러 비동기 작업을 보다 복잡한 작업으로 결합하고 다음 단계로 진행하기 전에 모든 비동기 작업이 완료될 때까지 기다릴 수 있습니다.

모든 요소가 처리될 때 알림을 보내는 시나리오에서는 CompletableFuture: allOf 메서드를 사용해야 합니다. 이 메서드는 여러 CompletableFuture 개체를 함께 결합하고 모든 개체의 비동기 작업이 완료될 때까지 기다린 후 새 CompletableFuture 개체를 반환할 수 있습니다.

allOf 메소드를 사용하는 기본 단계는 다음과 같습니다.

  1. 여러 CompletableFuture 객체를 생성하여 다양한 요소를 처리합니다.
  2. CompletableFuture.allOf 메서드를 호출하고 모든 CompletableFuture 개체를 매개변수로 전달한 다음 모든 비동기 작업이 완료될 때까지 기다립니다.
  3. 모든 비동기 작업이 완료된 후 allOf 메서드는 다음 처리에 사용할 수 있는 새로운 CompletableFuture 개체를 반환합니다.

아래에서는 CompletableFuture를 사용하여 위 단계에 따라 모든 요소가 처리될 때 이를 알리는 방법을 보여주는 예제를 사용합니다.

먼저 비동기 작업 처리를 시뮬레이션하기 위해 Task 클래스를 정의해야 합니다. 샘플 코드는 다음과 같습니다.

import java.util.concurrent.CompletableFuture;

public class Task {
    public CompletableFuture<String> process(String element) {
        CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
            // 模拟异步任务的处理过程
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return element.toUpperCase();
        });
        return future;
    }
}

위 코드에서 Task 클래스는 각 요소를 처리하고 CompletableFuture 객체를 반환하는 프로세스 메서드를 정의합니다. 이 메서드에서는 CompletableFuture.supplyAsync 메서드를 사용하여 비동기 작업 처리를 시뮬레이션하고 요소를 대문자로 변환한 후 반환합니다. 동시에 시간이 많이 걸리는 비동기 작업 프로세스를 시뮬레이션하기 위해 작업에 1초의 절전 모드를 추가했습니다.

다음으로 Main 클래스를 정의하고 이를 Task 클래스 및 CompletableFuture와 함께 사용하여 모든 요소가 처리될 때 이를 알립니다. 샘플 코드는 다음과 같습니다.

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;

public class Main {
    public static void main(String[] args) {
        List<String> elements = new ArrayList<>();
        elements.add("hello");
        elements.add("world");
        elements.add("java");

        Task task = new Task();
        List<CompletableFuture<String>> futures = new ArrayList<>();

        // 遍历每个元素,并将它们的处理结果封装成一个CompletableFuture对象
        for (String element : elements) {
            CompletableFuture<String> future = task.process(element);
            futures.add(future);
        }

        // 等待所有异步任务完成,将它们的处理结果打印出来
        CompletableFuture<Void> allFutures = CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()]));
        allFutures.thenRun(() -> {
            System.out.println("所有异步任务已完成:");

            for (CompletableFuture<String> future : futures) {
                try {
                    String result = future.get();
                    System.out.println(result);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
}

위 코드에서는 List를 정의하여 모든 요소를 ​​저장한 다음 Task 객체를 생성하고 각 요소를 순회하며 처리 결과를 CompletableFuture 객체로 캡슐화한 다음 List에 저장합니다. . 다음으로 CompletableFuture.allOf 메서드를 사용하여 모든 비동기 작업이 완료될 때까지 기다리고, 모든 작업이 완료된 후 allOf 메서드에서 반환된 CompletableFuture 개체를 통해 모든 작업의 ​​처리 결과를 인쇄합니다.

위 프로그램을 실행하면 다음과 같은 출력을 볼 수 있습니다.

所有异步任务已完成:
HELLO
WORLD
JAVA

위 프로그램의 실행 결과는 모든 비동기 작업이 처리되고 각 요소가 대문자로 변환되었음을 보여줍니다. 동시에 모든 요소가 처리될 때 이를 알리는 기능도 성공적으로 구현했습니다.

요약하자면 CompletableFuture를 사용하여 모든 요소가 처리될 때 이를 알리는 방법은 다음과 같습니다.

  1. 다양한 요소를 처리하기 위해 여러 CompletableFuture 개체를 만듭니다.
  2. CompletableFuture.allOf 메서드를 호출하고 모든 CompletableFuture 개체를 매개변수로 전달한 다음 모든 비동기 작업이 완료될 때까지 기다립니다.
  3. 모든 비동기 작업이 완료된 후 allOf 메서드는 다음 처리에 사용할 수 있는 새로운 CompletableFuture 개체를 반환합니다.

일반적으로 CompletableFuture는 여러 비동기 작업을 결합하고 모든 작업이 완료되면 알림을 보내는 데 도움이 되는 매우 편리한 비동기 프로그래밍 도구입니다. 실제 개발에서는 CompletableFuture를 사용하여 위의 구현 방법과 실제 비즈니스 시나리오를 기반으로 코드 동시성과 실행 효율성을 향상시킬 수 있습니다.

위 내용은 Java에서 CompletableFuture를 사용하여 모든 요소가 처리될 때 알리는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.