다음 동작을 명확하게 설명해야합니다. 다음과 같이java executor 서비스 종료 및 awaitTermination에 대한 이해
나는
위의 코드에서 for (int i = 0; i < thread_count; i++) {
Runnable worker = new MyThread(batchSize);
executor.execute(worker);
}
executor.shutdown();
executor.awaitTermination(15, TimeUnit.MINUTES);
System.out.println("All threads are finished");
나는 5 개 스레드가 그 10 분으로 완성되고 그것은 executor.awaitTermination(15, TimeUnit.MINUTES)
15 분 대기 시간에도-불구하고, System.out.println("All threads are finished")
를 실행, java.util.concurrent.ExecutorService
와 자바 응용 프로그램을 .
그러나 executor.shutdown()
을 제거하면 다음 줄을 실행하기 전에 프로그램에서 executor.awaitTermination(15, TimeUnit.MINUTES)
문에 지정된 15 분을 기다립니다.
아무도이 동작을 설명 할 수 있습니까? shutdown 명령을 사용하지 않으면 모든 스레드가 완료 되어도 지정된 시간 동안 기다리는 이유는 무엇입니까?
하시기 바랍니다 항상 읽고 사용하고있는 모든 메소드의 JavaDoc을 이해하려고 노력 . –
awaitTermination의 "종료"는 새 작업이 항상 발생할 수있는 시나리오를 염두에두고 설계 되었기 때문에 작업 종료가 아니라 스레드 풀의 종료를 의미합니다. – lbalazscs