>  기사  >  Java  >  여러 미래를 효율적으로 기다리고 예외를 처리하는 방법: CompletionService와 개별 미래 확인?

여러 미래를 효율적으로 기다리고 예외를 처리하는 방법: CompletionService와 개별 미래 확인?

Patricia Arquette
Patricia Arquette원래의
2024-10-25 22:57:28487검색

How to Efficiently Wait for Multiple Futures and Handle Exceptions: CompletionService vs. Individual Future Checks?

퓨처 목록 대기를 위한 최적의 구현

비동기 프로그래밍은 응답성 향상 및 효율적인 리소스 활용과 같은 이점을 제공합니다. 그러나 여러 Future를 동시에 관리하면 완료를 조정하고 예외를 효율적으로 처리하는 데 어려움이 발생할 수 있습니다. 이 기사에서는 목록의 모든 future가 완료되거나 그중 하나에서 예외가 발생할 때까지 기다리는 문제에 대한 솔루션을 탐색합니다.

간단한 접근 방식은 Future.get()을 사용하여 각 future를 개별적으로 확인하는 것입니다. 그러나 이 방법은 이전 작업에서 오류가 발생하더라도 모든 미래가 완료될 때까지 기다려야 하기 때문에 대규모 목록에는 비효율적입니다.

대체 솔루션은 CompletionService를 사용하는 것입니다. 이 서비스는 호출자가 완료된 미래를 사용할 수 있게 되면 수신할 수 있도록 차단 take() 메서드를 제공합니다. 동시에 오류 발생 시 진행 중인 작업을 취소할 수 있습니다.

다음 구현을 고려하세요.

<code class="java">Executor executor = Executors.newFixedThreadPool(4);
CompletionService<SomeResult> completionService =
    new ExecutorCompletionService<SomeResult>(executor);

// Submit 4 tasks
for (int i = 0; i < 4; i++) {
    completionService.submit(new Callable<SomeResult>() {
        public SomeResult call() {
            ... // Task logic
            return result;
        }
    });
}

int received = 0;
boolean errors = false;

// Monitor future completion and errors
while (received < 4 && !errors) {
    Future<SomeResult> resultFuture = completionService.take(); // Blocks if no futures available
    try {
        SomeResult result = resultFuture.get();
        received++;
        ... // Process result
    } catch (Exception e) {
        // Log error
        errors = true;
    }
}</code>

이 구현에서 CompletionService는 take() 메서드를 통해 완료된 미래를 받습니다. . 작업에서 예외가 발생하면 오류 플래그가 true로 설정되고 루프가 종료됩니다. 이 접근 방식은 후속 작업에 대한 대기 시간을 크게 줄여 보다 효율적인 예외 처리를 가능하게 합니다.

원하는 경우 오류 발생 시 미해결 작업을 취소하여 리소스를 즉시 확보함으로써 이 솔루션을 향상시킬 수 있습니다.

위 내용은 여러 미래를 효율적으로 기다리고 예외를 처리하는 방법: CompletionService와 개별 미래 확인?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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