ExecutorService를 활용할 때 개발자는 할당된 모든 작업이 완료될 때까지 실행을 일시 중지해야 할 수도 있습니다. 이 조사에서는 이 목표를 달성하기 위한 가장 간단한 접근 방식을 탐색합니다.
질문:
코어당 하나씩 여러 계산 작업을 실행하고 완료될 때까지 실행을 일시 중지합니다. 현재 구현에서는 ExecutorService.execute() 및 es.wait()를 활용하지만 IllegalMonitorStateException이 발생합니다.
답변:
Employ ExecutorService.invokeAll(), 간단한 솔루션 한 줄로 원하는 기능을 달성하는 code:
List<Callable<Object>> todo = new ArrayList<Callable<Object>>(singleTable.size()); for (DataTable singleTable: uniquePhrases) { todo.add(Executors.callable(new ComputeDTask(singleTable))); } List<Future<Object>> answers = es.invokeAll(todo);
invokeAll()은 모든 작업이 완료될 때까지 실행을 일시 중지하므로 수동 종료 및 waitTermination()이 필요하지 않게 됩니다. 이 접근 방식은 여러 실행에서 재사용 가능한 ExecutorService 인스턴스와 일치합니다.
관련 주제를 더 자세히 살펴보려면 다음 참조를 참조하세요.
위 내용은 ExecutorService를 사용하여 작업 완료를 효율적으로 기다리는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!