Maison Java javaDidacticiel Quelle est la différence entre CountDownLatch et CyclicBarrier dans la concurrence Java ?

Quelle est la différence entre CountDownLatch et CyclicBarrier dans la concurrence Java ?

Sep 06, 2023 pm 03:33 PM
cyclicbarrier countdownlatch java并发

Quelle est la différence entre CountDownLatch et CyclicBarrier dans la concurrence Java ?

CountDownLatch et CyclicBarrier sont tous deux utilisés dans des environnements multithread, et ils font tous deux partie d'environnements multithread.

Selon Java Doc -

CountDownLatch - Une aide à la synchronisation qui permet à un ou plusieurs threads d'attendre qu'un ensemble d'opérations effectuées dans d'autres threads soit terminé.

CyclicBarrier - Une aide à la synchronisation qui permet à un groupe de threads d'attendre les uns les autres pour atteindre un point de barrière commun.

Peut être avancé tr>Exception Exemple CyclicBarrier
public class Main {
   public static void main(String args[]) throws InterruptedException {
      ExecutorService executors = Executors.newFixedThreadPool(4);
      CyclicBarrier cyclicBarrier = new CyclicBarrier(5);
      executors.submit(new Service1(cyclicBarrier));
      executors.submit(new Service1(cyclicBarrier));
      executors.submit(new Service2(cyclicBarrier));
      executors.submit(new Service2(cyclicBarrier));
      executors.submit(new Service2(cyclicBarrier));
      Thread.sleep(3000);
      System.out.println("Done");
   }
}
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
public class Service1 implements Runnable {
   CyclicBarrier cyclicBarrier;
   public Service1(CyclicBarrier cyclicBarrier) {
      super();
      this.cyclicBarrier = cyclicBarrier;
   }
   @Override
   public void run() {
      System.out.println("Services1" + cyclicBarrier.getNumberWaiting());
      while (true) {
         try {
            cyclicBarrier.await();
         } catch (InterruptedException | BrokenBarrierException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
         }
      }
   }
}
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
public class Service2 implements Runnable {
   CyclicBarrier cyclicBarrier;
   public Service2(CyclicBarrier cyclicBarrier) {
      super();
      this.cyclicBarrier = cyclicBarrier;
   }
   @Override
   public void run() {
      System.out.println("Services2" + cyclicBarrier.getNumberWaiting());
      while (true) {
         try {
            cyclicBarrier.await();
         } catch (InterruptedException | BrokenBarrierException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
         }
      }
   }
}
Copier après la connexion
Exemple CountDownLatch
M. Non. Key CyclicBarrier CountDownLatch
1

Basic

permet la synchronisation d'un groupe de threads qui attendent tous les uns les autres pour atteindre un point de barrière commun.

Une aide à la synchronisation qui permet à un ou plusieurs threads d'attendre la fin d'un ensemble d'opérations effectuées dans d'autres threads.

2

Runnable

Il a un constructeur qui fournit un Runnable. "Il n'a pas de constructeur de ce type"

4.

Il n'est pas recommandé d'utiliser

Utilisation recommandée.

5

Si un thread est interrompu pendant l'attente, tous les autres threads en attente lanceront une exception BrokenBarrierException

Seul le thread actuel lancera

InterruptedException, sans affecter les autres threads

public class Main {
   public static void main(String args[]) throws InterruptedException {
      ExecutorService executors = Executors.newFixedThreadPool(4);
      CountDownLatch latch= new CountDownLatch(2);
      executors.submit(new Service1(latch));
      executors.submit(new Service2(latch));
      latch.await();
      System.out.println("Done");
   }
}
import java.util.concurrent.CountDownLatch;

public class Service1 implements Runnable {

   CountDownLatch latch;
   public Service1(CountDownLatch latch) {
      super();
      this.latch = latch;
   }

   @Override
   public void run() {
      try {
         Thread.sleep(20000);
      } catch (InterruptedException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }
      latch.countDown();
      System.out.println("Services2"+latch.getCount());
   }
}
import java.util.concurrent.CountDownLatch;
public class Service2 implements Runnable {
   CountDownLatch latch;
   public Service2(CountDownLatch latch) {
      super();
      this.latch = latch;
   }
   @Override
   public void run() {
      try {
         Thread.sleep(20000);
      } catch (InterruptedException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }
      latch.countDown();
      System.out.println("Services2"+latch.getCount());
   }
}
Copier après la connexion

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 de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment gérer l'accès simultané dans le développement de fonctions backend Java ? Comment gérer l'accès simultané dans le développement de fonctions backend Java ? Aug 04, 2023 pm 08:22 PM

Comment gérer l'accès simultané dans le développement de fonctions backend Java ? Dans les applications Internet modernes, un accès simultané élevé constitue un défi courant. Lorsque plusieurs utilisateurs accèdent aux services backend en même temps, si la simultanéité n'est pas gérée correctement, cela peut entraîner des problèmes tels que la cohérence des données, les performances et la sécurité. Cet article présentera quelques bonnes pratiques pour gérer les accès simultanés dans le développement backend Java. 1. Utiliser la synchronisation des threads Java fournit une variété de mécanismes pour gérer les accès simultanés, le plus couramment utilisé étant la synchronisation des threads. En ajoutant la synchronisation avant les blocs ou méthodes de code clé

Comment utiliser le framework Fork/Join dans la concurrence des fonctions Java et le multi-threading ? Comment utiliser le framework Fork/Join dans la concurrence des fonctions Java et le multi-threading ? Apr 27, 2024 am 10:09 AM

Comment créer des tâches parallèles à l'aide du framework Fork/Join en Java ? Définissez la logique des tâches, calculez les résultats ou effectuez des actions. Créez un ForkJoinPool pour gérer les threads parallèles. Utilisez la méthode fork() pour soumettre des tâches. Utilisez la méthode join() pour obtenir les résultats de la tâche.

Application du mécanisme de réflexion dans la concurrence Java ? Application du mécanisme de réflexion dans la concurrence Java ? Apr 15, 2024 pm 09:03 PM

Réponse : Le mécanisme de réflexion permet aux programmes Java d'inspecter et de modifier des classes et des objets au moment de l'exécution via l'API de réflexion, qui peut être utilisée pour implémenter des mécanismes de concurrence flexibles dans la concurrence Java. Application : créez dynamiquement des threads. Changez dynamiquement la priorité du thread. Injecter des dépendances.

Comment réparer : erreur de concurrence Java : détection de blocage Comment réparer : erreur de concurrence Java : détection de blocage Aug 25, 2023 pm 10:03 PM

Comment résoudre : Erreur de concurrence Java : Détection de blocage Le blocage est un problème courant dans la programmation multithread. Un blocage se produit lorsque deux threads ou plus s'attendent pour libérer une ressource verrouillée. Un blocage entraînera le blocage des threads, les ressources ne pourront pas être libérées et les programmes ne pourront pas continuer à s'exécuter, ce qui entraînera une panne du système. Pour résoudre ce problème, Java fournit un mécanisme de détection des interblocages. La détection des blocages détermine s'il existe un blocage en vérifiant les dépendances entre les threads et la situation de mise en file d'attente des applications de ressources. Une fois qu'un blocage est détecté, le système peut prendre les mesures correspondantes.

Quel est le rôle du blocage de la file d'attente dans la concurrence des fonctions Java et le multithreading ? Quel est le rôle du blocage de la file d'attente dans la concurrence des fonctions Java et le multithreading ? Apr 27, 2024 am 09:30 AM

File d'attente de blocage : un outil puissant pour la concurrence et le multithreading Blocking Queue est une file d'attente thread-safe qui joue les rôles clés suivants dans la programmation simultanée et multithread : Synchronisation des threads : empêche les conditions de concurrence et les incohérences de données en bloquant les opérations. Tampon de données : en tant que tampon de données, il atténue le problème de non-concordance des vitesses des threads producteur et consommateur. Équilibrage de charge : contrôlez le nombre d'éléments dans la file d'attente et équilibrez la charge des producteurs et des consommateurs.

Comment définir le compteur Java CountDownLatch et la barrière de cycle CyclicBarrier Comment définir le compteur Java CountDownLatch et la barrière de cycle CyclicBarrier May 21, 2023 pm 06:25 PM

Définition CountDownLatch : aide à la synchronisation qui permet à un ou plusieurs threads d'attendre jusqu'à ce qu'un ensemble d'opérations effectuées dans d'autres threads soit terminé. CyclicBarrier : aide à la synchronisation qui permet à un ensemble de threads d'attendre les uns les autres pour atteindre un point de barrière commun. En termes simples, C

Comment appliquer la barrière de cycle CyclicBarrier en Java Comment appliquer la barrière de cycle CyclicBarrier en Java May 12, 2023 pm 02:19 PM

1. Introduction CyclicBarrier signifie littéralement barrière de boucle (barrière cyclique). Il peut faire attendre un groupe de threads pour un certain état (point de barrière) puis les exécuter tous en même temps. C'est ce qu'on appelle le bouclage car CyclicBarrier peut être réutilisé une fois que tous les threads en attente sont libérés. La fonction de CyclicBarrier est de faire attendre un groupe de threads lorsqu'un point commun est atteint, tous les threads précédemment en attente continuent de s'exécuter et la fonction CyclicBarrier peut être réutilisée. 2. La méthode de construction de CyclicBarrier : //parties représente le nombre de threads interceptés par la barrière. Chaque thread appelle la méthode wait pour indiquer à CyclicBarrier de quoi il s'agit.

Comment utiliser CyclicBarrier pour une concurrence élevée en Java Comment utiliser CyclicBarrier pour une concurrence élevée en Java Apr 14, 2023 pm 07:07 PM

CyclicBarrier en Java est un outil de synchronisation qui permet à plusieurs threads d'attendre au niveau d'une barrière jusqu'à ce que tous les threads atteignent la barrière avant que l'exécution puisse continuer. CyclicBarrier peut être utilisé pour coordonner l'exécution de plusieurs threads afin qu'ils puissent s'exécuter simultanément à un certain point. CyclicBarrier est un outil de synchronisation en Java qui permet à plusieurs threads d'attendre à un point de barrière jusqu'à ce que tous les threads atteignent ce point avant que l'exécution puisse continuer. CyclicBarrier peut être utilisé pour coordonner l'exécution de plusieurs threads afin qu'ils puissent s'exécuter simultanément à un certain point. Comment utiliser CyclicBar

See all articles