Maison > Java > javaDidacticiel > Comment garantir l'arrêt correct des ExecutorServiceExecutors Java ?

Comment garantir l'arrêt correct des ExecutorServiceExecutors Java ?

Susan Sarandon
Libérer: 2024-10-24 07:32:30
original
790 Les gens l'ont consulté

How to Ensure Proper Shutdown of Java ExecutorServiceExecutors?

Assurer l'arrêt correct de Java ExecutorService

Les exécuteurs en Java offrent un moyen pratique de gérer les tâches asynchrones. Cependant, l'arrêt d'un exécuteur peut poser des problèmes, en particulier lorsqu'il s'agit de tâches de longue durée ou qui ne répondent pas.

Problème :

Considérez l'extrait de code :

<code class="java">ExecutorService exec = Executors.newSingleThreadExecutor();
// ... create and submit tasks
exec.shutdownNow();</code>
Copier après la connexion

Une fois toutes les tâches terminées, exec.isTerrated() reste faux, indiquant que certaines tâches ne se sont peut-être pas terminées correctement.

Solution :

Recommandée par Oracle approche est la méthode 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>
Copier après la connexion

Résumé des méthodes d'arrêt :

  • shutdown(): Désactive les soumissions de nouvelles tâches mais permet aux tâches en cours de s'exécuter.
  • shutdownNow() : Tente de mettre fin de force à toutes les tâches en cours d'exécution et en attente.
  • awaitTermination (long timeout, unité TimeUnit) lance InterruptedException : Bloque jusqu'à ce que toutes les tâches soient terminées, qu'un délai d'attente se produise ou que le thread soit interrompu.

En utilisant les méthodes d'arrêt appropriées, vous pouvez vous assurer que votre ExecutorService se termine correctement, en libérant des ressources et en garantissant un arrêt propre.

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