>Java >java지도 시간 >ExecutorService를 진행하기 전에 모든 작업이 완료되었는지 어떻게 확인할 수 있나요?

ExecutorService를 진행하기 전에 모든 작업이 완료되었는지 어떻게 확인할 수 있나요?

Linda Hamilton
Linda Hamilton원래의
2024-11-28 08:14:13816검색

How Can I Ensure All Tasks Complete Before Proceeding with an ExecutorService?

ExecutorService - 작업 완료를 기다리는 솔루션

동시에 실행해야 하는 다수의 계산 작업을 처리할 때 모든 작업이 완료될 때까지 기다릴 수 있는 메커니즘을 갖추는 것이 중요합니다. 이렇게 하면 모든 작업이 완료된 후에만 후속 작업을 수행할 수 있습니다.

이를 달성하기 위해 ExecutorService.wait()를 사용하려는 예에서는 IllegalMonitorStateException이 발생합니다. 이 오류는 객체의 고유 잠금을 기다릴 때 wait()가 사용되기 때문에 발생하며 이는 이 시나리오에는 적용되지 않습니다.

가장 간단한 해결 방법은 ExecutorService.invokeAll()을 활용하는 것입니다. 이 메서드는 Callable 작업 컬렉션을 가져와 병렬로 실행하고 Future 개체 목록을 반환합니다. 각 Future는 특정 작업의 결과를 나타냅니다. 기본적으로 InvokeAll()은 Future 개체 목록을 반환하기 전에 모든 작업이 완료될 때까지 차단합니다.

코드를 수정하는 방법은 다음과 같습니다.

ExecutorService es = Executors.newFixedThreadPool(2);
List<Callable<Object>> tasks = new ArrayList<>();

for (DataTable singleTable : uniquePhrases) {
    tasks.add(Executors.callable(new ComputeDTask(singleTable)));
}

List<Future<Object>> results = es.invokeAll(tasks);

이 업데이트된 코드에서 ExecutorService는 .invokeAll()은 모든 작업이 완료될 때까지 기다리므로 안심하고 후속 작업을 진행할 수 있습니다.

위 내용은 ExecutorService를 진행하기 전에 모든 작업이 완료되었는지 어떻게 확인할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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