Un CountDownLatch est utilisé pour la synchronisation de l'heure. Lors de l'utilisation d'un CountDownLatch, n'importe quel thread est autorisé à suivre le compte à rebours() autant de fois qu'ils le souhaitent. Fils appelé await() sont bloqués jusqu'à ce que le compte à rebours atteint zéro, à cause des appels à compte à rebours() par d'autres débloqué threads. La javadoc de CountDownLatch états:
L'attendent méthodes de bloc jusqu'à ce que le compte à rebours atteint zéro, suite à
les invocations du compte à rebours() la méthode d'après laquelle tous les threads en attente
sont libérées et toutes les invocations de attendent le retour
immédiatement.
...
Un autre exemple d'utilisation serait de diviser un problème en N parties,
décrire chaque partie avec un Exécutable qui s'exécute la partie et
le compte à rebours sur le loquet, et la file d'attente tous les Runnables à un Exécuteur testamentaire.
Lorsque toutes les sous-parties sont complets, la coordination du fil sera en mesure
pour passer à travers les attendent. (Lorsque les threads doivent à plusieurs reprises décompte en
de cette façon, au lieu d'utiliser un CyclicBarrier.)
En revanche, cyclique, la barrière est utilisée pour plusieurs martiens points, par exemple, si un ensemble de threads sont en cours d'exécution d'une boucle/progressive de calcul et de besoin de synchroniser avant de commencer la prochaine itération/phase. Selon la javadoc pour CyclicBarrier:
La barrière est appelé cyclique, car il peut être ré-utilisées après la
les threads en attente de libération.
Contrairement à la CountDownLatch, chaque appel à await() appartient à une phase et le fil de bloquer jusqu'à ce que toutes les parties appartenant à cette phase ont invoqué await(). Il n'est pas explicite, compte à rebours() de l'opération pris en charge par le CyclicBarrier.