Rumah >Java >javaTutorial >Bagaimana untuk Memastikan Penutupan Betul Java ExecutorServiceExecutors?

Bagaimana untuk Memastikan Penutupan Betul Java ExecutorServiceExecutors?

Susan Sarandon
Susan Sarandonasal
2024-10-24 07:32:30789semak imbas

How to Ensure Proper Shutdown of Java ExecutorServiceExecutors?

Memastikan Penutupan Java ExecutorService dengan betul

Pelaksana di Java menyediakan cara yang mudah untuk mengurus tugas tak segerak. Walau bagaimanapun, mematikan pelaksana boleh menimbulkan cabaran, terutamanya apabila menangani tugasan yang berpanjangan atau tidak bertindak balas.

Masalah:

Pertimbangkan coretan kod:

<code class="java">ExecutorService exec = Executors.newSingleThreadExecutor();
// ... create and submit tasks
exec.shutdownNow();</code>

Selepas semua tugasan selesai, exec.isTerminated() kekal palsu, menunjukkan bahawa sesetengah tugasan mungkin tidak ditamatkan dengan betul.

Penyelesaian:

Disyorkan Oracle pendekatan ialah kaedah 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>

Ringkasan Kaedah Shutdown:

  • shutdown(): Lumpuhkan penyerahan tugas baharu tetapi membenarkan tugasan semasa dilaksanakan.
  • shutdownNow(): Percubaan untuk menamatkan secara paksa semua tugas pelaksanaan dan menunggu.
  • menunggu Penamatan(masa tamat masa yang lama, unit TimeUnit) lontaran InterruptedException: Menyekat sehingga semua tugas selesai, tamat masa berlaku atau urutan terganggu.

Dengan menggunakan kaedah penutupan yang sesuai, anda boleh memastikan bahawa ExecutorService anda ditamatkan dengan betul, melepaskan sumber dan memastikan penutupan bersih.

Atas ialah kandungan terperinci Bagaimana untuk Memastikan Penutupan Betul Java ExecutorServiceExecutors?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn