Il semble que le compteur de compte à rebours, appelant la méthode du compte à rebours de l'objet à compte à rebours, moins le compteur par 1. Lorsqu'il atteint 0, tous les serveurs commencent à s'exécuter.
java.util.concurrent.countDownlaatch
Une classe auxiliaire synchrone, avant de terminer un ensemble d'opérations dans d'autres threads, il permet à un ou plusieurs threads d'attendre. Utilisez un décompte donné pour initialiser le compte à rebours. Étant donné que la méthode à rebours () est appelée, la méthode Await a été bloquée avant que le comptage actuel n'atteigne zéro. Après cela, tous les fils d'attente seront publiés, et tous les appels d'attente ultérieurs reviendront immédiatement. Ce phénomène n'apparaît qu'une seule fois, la comptabilité ne peut pas être réinitialisée. Si vous devez réinitialiser le décompte, envisagez d'utiliser CyclicBarrier.
CountdownLatch est un outil de synchronisation général, qui a de nombreuses utilisations. Utilisez le comptage 1 Countownlatch initialisé comme un simple déposant d'ouverture / verrouillage, ou l'entrée: Avant d'ouvrir l'entrée en appelant l'appel de fil à rebours (), tous les threads appelant attendent ont attendu à l'entrée. Utilisez N initiales de CountdownLatch peut attendre un fil pour attendre avant la fin du thread N, ou l'attendez avant une certaine opération.
L'une des fonctionnalités utiles du compte à rebours est qu'il ne nécessite pas le thread qui appelle la méthode du compte à rebours pour se poursuivre jusqu'à ce qu'elle soit comptée à zéro, et avant que tous les threads ne puissent passer, il empêche tout fil de continuer à passer.
Exemple: plusieurs athlètes attendent l'ordre de l'arbitre: tous les athlètes tels que l'arbitre et d'autres athlètes libèrent les résultats après Qi Qi
package com.ljq.test.thread; .NewCachedThreadpool (); L'arbitre a annoncé les résultats du résultat. Raun () {try {System.out.println ("thread" + thread.currentThread (). getName () + "se prépare à accepter les commandes"); + thread.currentThread (). + "Response des résultats du traitement") ;;} catch (exception e) {e.printStackTrace ();}}; .random () * 10000); le système de commande.out.println ("thread" + thread.currentThread (). getName () "a envoyé la commande, en attendant le résultat"); 0 Tous les athlètes en place System.out.println ("thread" + thread.currentThread (). GetName () + "a reçu tous les résultats de réponse");} service.shutdown ();}}Résultats du dos:
Le thread pool-thread-3 se prépare à accepter le thread de commande Pool-1-thread-c'est qui se prépare à accepter le thread de commande Pool-thread-2 se prépare à accepter le thread de commande que Main enverra bientôt le thread de commande Main a envoyé le La commande, attendant le résultat du résultat, attend le résultat du résultat thread pool-thread-2 a accepté la commande thread pool-1-thread-1 pool-1-thread-3 a accepté le thread de commande pool-thread-3 pour Répondez au traitement du traitement de commande Thread Pool-1- Thread-2 Réponse au traitement des commandes Résultats Thread Pool-1-thread-1 Réponse Traitement Commande Le thread du résultat a reçu tous les résultats de la réponse