Question :
Comment assurer la fin des tâches en cours d'exécution lors de l'arrêt d'un Java ExecutorService ?
Réponse :
La documentation de l'API Oracle pour ExecutorService recommande l'approche suivante :
<code class="java">void shutdownAndAwaitTermination(ExecutorService pool) { pool.shutdown(); // Disable new tasks try { // Wait for existing tasks if (!pool.awaitTermination(60, TimeUnit.SECONDS)) { pool.shutdownNow(); // Cancel executing tasks if (!pool.awaitTermination(60, TimeUnit.SECONDS)) System.err.println("Pool did not terminate"); } } catch (InterruptedException ie) { pool.shutdownNow(); Thread.currentThread().interrupt(); } }</code>
Méthodes liées à l'arrêt :
Attente de résiliation améliorée :
Si la piscine met plus de temps à s'arrêter, vous pouvez modifier :
<code class="java">if (!pool.awaitTermination(60, TimeUnit.SECONDS))</code>
en :
<code class="java">while (!pool.awaitTermination(60, TimeUnit.SECONDS))</code>
Cela continuera attendre indéfiniment jusqu'à ce que la résiliation soit obtenue.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!