Maison >Java >javaDidacticiel >Comment attendre efficacement la fin de la tâche ExecutorService ?

Comment attendre efficacement la fin de la tâche ExecutorService ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-26 06:27:45443parcourir

How to Efficiently Wait for ExecutorService Task Completion?

ExecutorService en attente de fin de tâche

Dans les applications multithread, il est souvent nécessaire d'attendre que toutes les tâches soumises à un ExecutorService se terminent avant de continuer. Bien que des techniques rudimentaires telles que l'interrogation ou la vérification constante d'un compteur de tâches global existent, des solutions plus efficaces et plus élégantes sont disponibles.

waitTermination() et shutdown()

L'approche recommandée implique d'utiliser la méthode waitTermination() d'ExecutorService. Il vous permet de spécifier un délai d'attente ou d'attendre indéfiniment la fin des threads. Voici comment cela fonctionne :

// Create an ExecutorService instance
ExecutorService taskExecutor = Executors.newFixedThreadPool(4);

// Submit tasks as needed
while(...) {
  taskExecutor.execute(new MyTask());
}

// Shutdown the ExecutorService to prevent new tasks from being submitted
taskExecutor.shutdown();

// Wait for threads to complete
try {
  taskExecutor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
} catch (InterruptedException e) {
  // Handle any interruptions
}

Cette méthode se bloque jusqu'à ce que les threads soient terminés ou que le délai d'attente soit atteint. Vous pouvez également spécifier un délai d'attente fini si vous souhaitez que l'application continue après un laps de temps spécifique, même si certaines tâches ne sont pas terminées.

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