>  기사  >  Java  >  Java ExecutorService를 종료할 때 작업 종료를 확인하는 방법은 무엇입니까?

Java ExecutorService를 종료할 때 작업 종료를 확인하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-24 07:39:02822검색

How to Ensure the Termination of Tasks When Shutting Down a Java ExecutorService?

ExecutorService 종료 종료 전략

질문:

Java를 종료할 때 실행 중인 작업이 종료되도록 어떻게 보장합니까? ExecutorService?

답변:

ExecutorService에 대한 Oracle API 문서에서는 다음 접근 방식을 권장합니다.

<code class="java">void shutdownAndAwaitTermination(ExecutorService pool) {
   pool.shutdown(); // Disable new tasks
   try {
     // Wait for existing tasks
     if (!pool.awaitTermination(60, TimeUnit.SECONDS)) {
       pool.shutdownNow(); // Cancel executing tasks
       if (!pool.awaitTermination(60, TimeUnit.SECONDS))
           System.err.println("Pool did not terminate");
     }
   } catch (InterruptedException ie) {
     pool.shutdownNow();
     Thread.currentThread().interrupt();
   }
}</code>

종료 관련 방법:

  • shutdown: 이전에 제출한 작업을 실행하고 새 작업을 거부하여 순차적인 종료를 시작합니다.
  • shutdownNow: 모든 작업을 중지하려고 시도합니다. 작업을 실행하고 실행 대기 중인 작업 목록을 반환합니다.
  • awaitTermination: 모든 작업이 완료되거나 시간 초과 또는 중단이 발생할 때까지 차단합니다.

강화된 종료 대기:

풀을 종료하는 데 시간이 더 걸리면 다음을 변경할 수 있습니다.

<code class="java">if (!pool.awaitTermination(60, TimeUnit.SECONDS))</code>

<code class="java">while (!pool.awaitTermination(60, TimeUnit.SECONDS))</code>

이 작업은 계속됩니다. 종료가 이루어질 때까지 무기한 대기합니다.

위 내용은 Java ExecutorService를 종료할 때 작업 종료를 확인하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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