Maison  >  Article  >  Java  >  Comment garantir l’arrêt correct des ExecutorServiceExecutors Java ?

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

Susan Sarandon
Susan Sarandonoriginal
2024-10-24 07:32:30665parcourir

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>

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>

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!

Déclaration:
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