CyclicBarrier与CountDownLatch的区别
Posted 起个po名真费劲
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CyclicBarrier与CountDownLatch的区别相关的知识,希望对你有一定的参考价值。
import java.util.concurrent.CountDownLatch; /** * 作用于单个线程或几个线程,,在其他线程执行完之前,一直等待(await)知道countDown为零 * @author Administrator * */ public class CountDownlatchTest { public static void main(String[] args) throws InterruptedException { CountDownLatch countDownLatch = new CountDownLatch(5); for(int i=0;i<5;i++){ new Thread(new readNum(i,countDownLatch)).start(); } countDownLatch.await(); System.out.println("线程执行结束。。。。"); } static class readNum implements Runnable{ private int id; private CountDownLatch latch; public readNum(int id,CountDownLatch latch){ this.id = id; this.latch = latch; } @Override public void run() { synchronized (this){ System.out.println("id:"+id); latch.countDown(); System.out.println("线程组任务"+id+"结束,其他任务继续"); } } } }
/** * 作用于多个线程 * 可以通过CyclicBarrier实现没有先后顺序的同时执行任意的线程(假设cpu也是任意个) * 多个线程一直阻塞,直到await数量达到CyclicBarrier的参数时,唤醒阻塞的线程 * 可重用 * @author Administrator * */ public class CyclicBarrierTest { public static void main(String[] args) throws InterruptedException { CyclicBarrier cyclicBarrier = new CyclicBarrier(5, new Runnable() { @Override public void run() { System.out.println("线程组执行结束"); } }); for (int i = 0; i < 5; i++) { new Thread(new readNum(i,cyclicBarrier)).start(); } //CyclicBarrier 可以重复利用, // 这个是CountDownLatch做不到的 // for (int i = 11; i < 16; i++) { // new Thread(new readNum(i,cyclicBarrier)).start(); // } } static class readNum implements Runnable{ private int id; private CyclicBarrier cyc; public readNum(int id,CyclicBarrier cyc){ this.id = id; this.cyc = cyc; } @Override public void run() { synchronized (this){ System.out.println("id:"+id); try { cyc.await(); System.out.println("线程组任务" + id + "结束,其他任务继续"); } catch (Exception e) { e.printStackTrace(); } } } } }
以上是关于CyclicBarrier与CountDownLatch的区别的主要内容,如果未能解决你的问题,请参考以下文章
CountDownLatch与CyclicBarrier区别,举例
JAVA多线程提高十:同步工具CyclicBarrier与CountDownLatch
CyclicBarrier与CountDownLatch的区别
CyclicBarrier和CountDownLatch的用法与区别
JUC并发编程 共享模式之工具 JUC CyclicBarrier(循环栅栏 与CountdownLatch最大的不同是可以重值倒计时) -- CyclicBarrier介绍使用注意事项