Maison  >  Article  >  Java  >  Qu’est-ce que CyclicBarrier ? Faits clés et exemples expliqués

Qu’est-ce que CyclicBarrier ? Faits clés et exemples expliqués

Barbara Streisand
Barbara Streisandoriginal
2024-10-09 06:08:29607parcourir

What Is CyclicBarrier? Key Facts and Examples Explained

1. Qu'est-ce qu'une barrière cyclique ?

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.

1.1 Principales caractéristiques de CyclicBarrier

  • Réutilisabilité : Contrairement à d'autres aides à la synchronisation comme CountDownLatch , un CyclicBarrier peut être réinitialisé et réutilisé une fois que tous les threads ont été libérés.
  • Action de barrière : vous pouvez éventuellement spécifier une action de barrière qui est exécutée une fois que tous les threads atteignent la barrière.
  • Flexibilité : Elle est utile dans les scénarios où plusieurs threads doivent s'attendre les uns les autres pour terminer une phase avant de passer à la suivante.

1.2 Comment fonctionne CyclicBarrier

  • Initialisation : Un CyclicBarrier est initialisé avec un certain nombre de parties (threads) qui doivent attendre à la barrière.
  • En attente : Chaque thread appelle la méthode wait() sur la barrière.
  • Release : Lorsque le dernier thread atteint la barrière, tous les threads en attente sont libérés et l'action de barrière facultative (si fournie) est exécutée.
  • Réutilisation : La barrière est réinitialisée et peut être réutilisée pour un autre cycle d'attente.

1.3 Cas d'utilisation courants

  • Traitement par lots : Lors du traitement des données par lots, les threads peuvent utiliser un CyclicBarrier pour se synchroniser à la fin de chaque lot.
  • Algorithmes parallèles : Dans les algorithmes parallèles, les threads doivent souvent se synchroniser après avoir terminé certaines phases de calcul.

2. Exemples pratiques et démos

Pour mieux comprendre le fonctionnement d'un CyclicBarrier, regardons un exemple pratique et une démo.

2.1 Exemple de code

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.");
    }
}

2.2 Résultats de la démonstration

Lorsque vous exécutez le code ci-dessus, vous observerez la séquence suivante :

  • Chaque fil imprime un message indiquant qu'il attend à la barrière.
  • Une fois que tous les threads atteignent la barrière, la BarrierAction est exécutée, affichant "Barrier Action exécutée. Tous les threads sont libérés."
  • Chaque fil imprime ensuite un message indiquant qu'il a franchi la barrière.

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.

3. Conclusion

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!

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