명령 줄 응용 프로그램이 있습니다. 루프를 100 번 실행하고 루프에서 스레드를 사용하여 작업을 예약합니다. 언제든지 실행중인 4 개의 스레드가 있으므로 ExecutorService를 사용하고 있습니다.풀의 모든 스레드가 완료된 후에 요약 메시지를 인쇄하는 방법은 무엇입니까?
루프가 끝난 후 요약 메시지를 인쇄하려고합니다. 예 : 100 개의 모든 작업을 완료하는 데 걸리는 시간. 코드를 밟았을 때 디버거는 요약 부분으로 곧바로 갔지만 다른 작업은 여전히 실행 중입니다. 나는 각 스레드가 자체적으로 실행되기 때문에 이것이라고 생각합니다. 그렇다면 모든 스레드가 완료된 후에 만 메시지를 인쇄하려면 어떻게해야합니까?
ExecutorService exec = Executors.newFixedThreadPool(4);
long startTime = System.currentTimeMillis();
for (int i = 0; i < 100; i++) {
Runnable requestHandler = new Runnable() {
@Override
public void run() {
try {
// call task function in here
} catch (Exception ex) {
}
}
};
exec.execute(requestHandler);
}
exec.shutdown();
long endTime = System.currentTimeMillis();
LOGGER.info("******************SUMMARY******************");
LOGGER.info("Time taken : " + ((endTime - startTime)/1000) + " seconds, "
+ ((endTime - startTime)/1000/60) + " minutes");
더 많은 검색 결과가 있습니다. 나는 CountDownLatch를 사용하여 끝내었다. 예를 들어 http://www.javamex.com/tutorials/threads/CountDownLatch.shtml – user373201