Apabila berurusan dengan java ExecutorService, aspek penting ialah mengendalikan proses penutupan untuk memastikan semua tugasan ditamatkan dengan betul. Ini menjadi mencabar apabila tamat masa atau gangguan lain berlaku semasa pelaksanaan tugas.
Pendekatan Tersuai
Kod yang disediakan menunjukkan senario di mana ExecutorService, yang melaksanakan objek CallableTask, menghadapi kesukaran ditutup selepas semua tugas selesai. Isu ini berpunca daripada potensi urutan tugasan yang melebihi ambang tamat masa untuk kekal aktif, menghalang penamatan pelaksanaan.
Penyelesaian Disyorkan
Untuk menangani masalah ini, API Oracle dokumentasi untuk ExecutorService mengesyorkan pendekatan berikut:
<code class="java">void shutdownAndAwaitTermination(ExecutorService pool) { pool.shutdown(); try { if (!pool.awaitTermination(60, TimeUnit.SECONDS)) { pool.shutdownNow(); if (!pool.awaitTermination(60, TimeUnit.SECONDS)) System.err.println("Pool did not terminate"); } } catch (InterruptedException ie) { pool.shutdownNow(); Thread.currentThread().interrupt(); } }</code>
Kaedah ini memastikan proses penutupan yang teratur:
Ringkasan Ringkas Kaedah Berkaitan Penutupan
Petua Tambahan
Untuk melanjutkan tamat masa penutupan bagi tugasan yang degil, ubah suai awaitTermination():
<code class="java">if (!pool.awaitTermination(60, TimeUnit.SECONDS)) </code>
kepada:
<code class="java">while (!pool.awaitTermination(60, TimeUnit.SECONDS)) </code>
Dengan melaksanakan teknik ini, anda boleh meningkatkan kebolehpercayaan proses penutupan ExecutorService anda, memastikan penamatan tugas yang betul dan pembersihan sistem.
Atas ialah kandungan terperinci Cara Memastikan Penamatan Tugasan Semasa Penutupan Perkhidmatan Java ExecutorService. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!