Maison > Java > javaDidacticiel > le corps du texte

Comment assurer la fin des tâches lors de l'arrêt d'un service Java ExecutorService ?

Barbara Streisand
Libérer: 2024-10-24 07:39:02
original
897 Les gens l'ont consulté

How to Ensure the Termination of Tasks When Shutting Down a Java ExecutorService?

Stratégie de résiliation de l'arrêt d'ExecutorService

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>
Copier après la connexion

Méthodes liées à l'arrêt :

  • shutdown : Initie un arrêt ordonné, en exécutant les tâches précédemment soumises et en rejetant les nouvelles tâches.
  • shutdownNow : Tente de tout arrêter tâches en cours d'exécution et renvoie une liste des tâches en attente d'exécution.
  • awaitTermination : Bloque jusqu'à ce que toutes les tâches soient terminées ou jusqu'à ce qu'un délai d'attente ou une interruption se produise.

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>
Copier après la connexion

en :

<code class="java">while (!pool.awaitTermination(60, TimeUnit.SECONDS))</code>
Copier après la connexion

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!

source:php
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal