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.
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 | tr>Exception
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 | Exemple CyclicBarrier |
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!