728x90
ExecutorService는 작업을 한 번에 편리하게 처리하는 invokeAll() , invokeAny() 기능을 제공한다.
작업 컬렉션 처리
invokeAll()
- <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks) throws InterruptedException
- 모든 Callable 작업을 제출하고, 모든 작업이 완료될 때까지 기다린다.
- <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit) throws InterruptedException
- 지정된 시간 내에 모든 Callable 작업을 제출하고 완료될 때까지 기다린다.
invokeAny()
- <T> T invokeAny(Collection<? extends Callable<T>> tasks) throws InterruptedException, ExecutionException
- 하나의 Callable 작업이 완료될 때까지 기다리고, 가장 먼저 완료된 작업의 결과를 반환한다.
- 완료되지 않은 나머지 작업은 취소한다.
- <T> T invokeAny(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException
- 지정된 시간 내에 하나의 Callable 작업이 완료될 때까지 기다리고, 가장 먼저 완료된 작업의 결과를 반환한다.
- 완료되지 않은 나머지 작업은 취소한다.
invokeAll() , invokeAny()를 사용하면 한꺼번에 여러 작업을 요청할 수 있다. 둘의 차이를 코드로 알아보자.
특정 시간 대기하는 CallableTask

- Callable 인터페이스를 구현한다.
- 전달받은 sleep값만큼 대기한다.
- sleep 값을 반환한다.
InvokeAll()


- invokeAll() 은 한 번에 여러 작업을 제출하고, 모든 작업이 완료될 때까지 기다린다.
InvokeAny()


- invokeAny()는 한 번에 여러 작업을 제출하고, 가장 먼저 완료된 작업의 결과를 반환한다.
- 이때 완료되지 않은 나머지 작업은 인터럽트를 통해 취소한다.
728x90
'멀티스레드와 동시성' 카테고리의 다른 글
| Ch12. 스레드 풀과 Executor 프레임워크 - Executor 스레드 풀 관리 (0) | 2024.10.16 |
|---|---|
| Ch12. 스레드 풀과 Executor 프레임워크 - ExecutorService 종료 (0) | 2024.10.16 |
| Ch12. 스레드 풀과 Executor 프레임워크 - Future (0) | 2024.10.06 |
| Ch12. 스레드 풀과 Executor 프레임워크 - Executor 프레임워크와 ExecutorService (0) | 2024.09.25 |
| Ch12. 스레드 풀과 Executor 프레임워크 - 스레드를 직접 사용할 때의 문제 (0) | 2024.09.25 |