Un CyclicBarrier est une aide à la synchronisation qui permet à un ensemble de threads d'attendre tous les uns les autres pour atteindre un point de barrière commun. Une fois que tous les threads atteignent la barrière, ils sont libérés pour continuer leur travail. La barrière est dite « cyclique » car elle peut être réutilisée une fois les threads en attente libérés.
Pour mieux comprendre le fonctionnement d'un CyclicBarrier, regardons un exemple pratique et une démo.
Voici un exemple simple démontrant l'utilisation de CyclicBarrier :
import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; public class CyclicBarrierDemo { public static void main(String[] args) { final int numberOfThreads = 3; CyclicBarrier barrier = new CyclicBarrier(numberOfThreads, new BarrierAction()); for (int i = 0; i < numberOfThreads; i++) { new Thread(new Task(barrier)).start(); } } } class Task implements Runnable { private final CyclicBarrier barrier; Task(CyclicBarrier barrier) { this.barrier = barrier; } @Override public void run() { try { System.out.println(Thread.currentThread().getName() + " is waiting at the barrier."); barrier.await(); System.out.println(Thread.currentThread().getName() + " has passed the barrier."); } catch (InterruptedException | BrokenBarrierException e) { e.printStackTrace(); } } } class BarrierAction implements Runnable { @Override public void run() { System.out.println("Barrier Action executed. All threads are released."); } }
Lorsque vous exécutez le code ci-dessus, vous observerez la séquence suivante :
Voici un exemple de résultat :
Thread-0 is waiting at the barrier. Thread-1 is waiting at the barrier. Thread-2 is waiting at the barrier. Barrier Action executed. All threads are released. Thread-0 has passed the barrier. Thread-1 has passed the barrier. Thread-2 has passed the barrier.
Un CyclicBarrier est un outil inestimable pour coordonner plusieurs threads en Java. Il permet aux threads de s'attendre les uns les autres et peut être réutilisé sur plusieurs cycles, ce qui le rend idéal pour de nombreux scénarios de synchronisation. Que vous traitiez des données par lots ou que vous implémentiez des algorithmes parallèles, comprendre comment utiliser efficacement CyclicBarrier améliorera vos compétences en programmation multithread.
N'hésitez pas à commenter ci-dessous si vous avez des questions ou si vous avez besoin de précisions supplémentaires sur l'utilisation de CyclicBarrier dans vos projets !
Lisez plus d'articles sur : Qu'est-ce que CyclicBarrier ? Faits clés et exemples expliqués
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!