Rumah > Java > javaTutorial > teks badan

Bagaimana untuk Mematikan Java ExecutorService Executors dengan betul?

Mary-Kate Olsen
Lepaskan: 2024-10-24 07:27:30
asal
625 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

dengan

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

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!

sumber:php
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!