Rumah  >  Artikel  >  Java  >  Bagaimana untuk Mematikan Java ExecutorService Executors dengan betul?

Bagaimana untuk Mematikan Java ExecutorService Executors dengan betul?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-24 07:27:30626semak imbas

How to Properly Shut Down Java ExecutorService Executors?

Mematikan Java ExecutorService dengan Anggun

Executors ialah cara mudah untuk mengurus dan melaksanakan tugas secara serentak dalam aplikasi Java. Walau bagaimanapun, penutupan yang tidak betul boleh membawa kepada tingkah laku atau isu prestasi yang tidak dijangka. Panduan ini memberikan penjelasan terperinci tentang cara menutup anExecutorService dengan betul, memastikan semua tugasan ditamatkan atau dibatalkan.

Memahami Penutupan ExecutorService

ExecutorService menawarkan dua kaedah penutupan utama :

  • shutdown(): Menghalang tugasan baharu daripada diserahkan sambil membenarkan tugasan sedia ada selesai.
  • shutdown Now(): Percubaan untuk menghentikan semua tugasan pelaksanaan dan menunggu, mengembalikan senarai tugasan yang belum diproses.

Perlu ambil perhatian bahawa penutupan tidak dijamin untuk menamatkan semua tugas. Tugasan yang gagal bertindak balas terhadap gangguan atau mempunyai operasi yang berjalan lama mungkin kekal aktif.

Prosedur Penutupan Disyorkan

Dokumentasi Oracle mencadangkan pendekatan berikut untuk penutupan yang anggun:

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

Pendekatan ini memastikan bahawa tugasan sedia ada dibenarkan untuk diselesaikan sambil menghalang penyerahan baharu. Jika proses penutupan mengambil masa lebih lama daripada yang dijangkakan, anda boleh menggantikan

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

dengan

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

untuk terus menunggu tugasan selesai.

Ringkasan Penutupan Kaedah

  • shutdown(): Berhenti menerima tugasan baharu tetapi membenarkan tugasan sedia ada untuk diselesaikan.
  • shutdown Now(): Menghentikan semua tugasan pelaksanaan dan menunggu, mengembalikan tugasan yang belum diproses.
  • menunggu Penamatan(masa tamat masa yang lama, unit Unit Masa): Sekat sehingga semua tugasan selesai, tamat masa berlaku atau urutan semasa terganggu.

Atas ialah kandungan terperinci Bagaimana untuk Mematikan Java ExecutorService Executors dengan betul?. 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