CountDownLatch、CyclicBarrier 使用区别

打印 上一主题 下一主题

主题 945|帖子 945|积分 2835

主要区别


  • CountDownLatch:所有子线程完成后,再执行主线程
  • CyclicBarrier: 所有子线程就绪后,再执行子线程
CountDownLatch

所有子线程完成后,再执行主线程

多线程 ThreadPoolTaskExecutor 应用
SpringBoot 下载文件
CyclicBarrier

有若干个线程,比如说有五个线程,需要它们都到达了某一个点之后才能开始一起执行,也就是说假如其中只有四个线程到达了这个点,还差一个线程没到达,此时这四个线程都会进入等待状态,直到第五个线程也到达了这个点之后,这五个线程才开始一起进行执行状态
所有子线程就绪后,再执行子线程

所有子线程都已经到达屏障之后,此时屏障就会消失,所有子线程继续执行,若存子线程尚未到达屏障,其他到达了屏障的线程都会进行等待
CyclicBarrier对于涉及到固定大小的线程是非常有用的,线程们必须相互等待。该屏障称之为循环屏障,是因为当等待屏障的线程被释放之后,该屏障能循环使用
  1. package com.concurrency2;
  2. import java.util.Random;
  3. import java.util.concurrent.CyclicBarrier;
  4. public class MyTest1 {
  5.     public static void main(String[] args) {
  6.         CyclicBarrier cyclicBarrier = new CyclicBarrier(3);
  7.         for(int i = 0;i < 3;i ++) {
  8.             new Thread(() -> {
  9.                 try {
  10.                     Thread.sleep((long)(Math.random() * 2000));
  11.                     int randomInt = new Random().nextInt(500);
  12.                     System.out.println("hello " + randomInt);
  13.                     cyclicBarrier.await();
  14.                     System.out.println("world " + randomInt);
  15.                 } catch (Exception e) {
  16.                     e.printStackTrace();
  17.                 }
  18.             }).start();
  19.         }
  20.     }
  21. }
复制代码
输出
  1. hello 30
  2. hello 471
  3. hello 343
  4. world 343
  5. world 471
  6. world 30
复制代码
重要成员变量
  1. // 可以理解为初始化时 需要阻塞的任务个数
  2. private final int parties;
  3. // 剩余需要等待的任务个数,初始值为parties,直到为0时依次唤醒所有被阻塞的任务线程。
  4. private int count;
  5. // 每次对“栅栏”的主要成员变量进行变更操作,都应该加锁
  6. private final ReentrantLock lock = new ReentrantLock();
  7. // 用于阻塞和唤醒任务线程
  8. private final Condition trip = lock.newCondition();
  9. // 在所有线程被唤醒前,需要执行的一个Runable对应的run方法
  10. private final Runnable barrierCommand;
  11. // 用于表示“栅栏”当前的状态
  12. private Generation generation = new Generation();
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

耶耶耶耶耶

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表