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!