Rumah >Java >javaTutorial >Bagaimana untuk Memastikan Penutupan Betul 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:
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!