Java ExecutorService의 적절한 종료 보장
Java의 실행 프로그램은 비동기 작업을 관리하는 편리한 방법을 제공합니다. 그러나 실행기를 종료하면 특히 장기 실행 또는 응답하지 않는 작업을 처리할 때 문제가 발생할 수 있습니다.
문제:
다음 코드 조각을 고려하세요.
<code class="java">ExecutorService exec = Executors.newSingleThreadExecutor(); // ... create and submit tasks exec.shutdownNow();</code>
모든 작업이 완료된 후에도 exec.isTerminating()은 false로 유지되어 일부 작업이 제대로 종료되지 않았을 수 있음을 나타냅니다.
해결책:
Oracle 권장 접근 방식은 shutdownAndAwaitTermination 방법입니다:
<code class="java">void shutdownAndAwaitTermination(ExecutorService pool) { pool.shutdown(); try { // Wait for existing tasks to terminate (up to 60 seconds) if (!pool.awaitTermination(60, TimeUnit.SECONDS)) { pool.shutdownNow(); // Wait for cancelled tasks to respond (up to 60 seconds) if (!pool.awaitTermination(60, TimeUnit.SECONDS)) { System.err.println("Pool did not terminate"); } } } catch (InterruptedException ie) { pool.shutdownNow(); Thread.currentThread().interrupt(); } }</code>
종료 방법 요약:
적절한 종료 방법을 활용하면 ExecutorService가 올바르게 종료되고 리소스가 해제되며 깔끔한 종료.
위 내용은 Java ExecutorServiceExecutors의 적절한 종료를 보장하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!