CountDownLatch是减计数方式,计数==0时释放所有等待的线程;CyclicBarrier是加计数方式,计数达到构造方法中参数指定的值时释放所有等待的线程。
CountDownLatch当计数到0时,计数无法被重置;CyclicBarrier计数达到指定值时,计数置为0重新开始。
CountDownLatch每次调用countDown()方法计数减一,调用await()方法只进行阻塞,对计数没任何影响;CyclicBarrier只有一个await()方法,调用await()方法计数加1,若加1后的值不等于构造方法的值,则线程阻塞。

  1. import java.util.concurrent.CountDownLatch;
  2. public class TestConcurrent extends Thread {
  3. /**
  4. * CountDownLatch 是并发包中提供的一个可用于控制多个线程同时开始某个动作的类,其
  5. * 采用的方式为减计数的方式,当计数减至零时位于latch.await()后的代码才会被执行。
  6. */
  7. private static CountDownLatch latch = new CountDownLatch(10);
  8. public static void main(String[] args) {
  9. long start = System.currentTimeMillis();
  10. int i = 0;
  11. while (i < 10) {
  12. i++;
  13. new TestConcurrent().start();
  14. }
  15. try {
  16. latch.await();
  17. } catch (InterruptedException e) {
  18. e.printStackTrace();
  19. }
  20. System.out.println("use time:" + (System.currentTimeMillis() - start));
  21. }
  22. public void run() {
  23. System.out.println("...");
  24. try {
  25. Thread.sleep(100);
  26. } catch (InterruptedException e) {
  27. e.printStackTrace();
  28. }
  29. latch.countDown();
  30. }
  31. }
import java.util.concurrent.CountDownLatch;

public class TestConcurrent extends Thread {
/**
* CountDownLatch 是并发包中提供的一个可用于控制多个线程同时开始某个动作的类,其
* 采用的方式为减计数的方式,当计数减至零时位于latch.await()后的代码才会被执行。
*/
private static CountDownLatch latch = new CountDownLatch(10); public static void main(String[] args) {
long start = System.currentTimeMillis();
int i = 0;
while (i < 10) {
i++;
new TestConcurrent().start();
}
try {
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("use time:" + (System.currentTimeMillis() - start));
} public void run() {
System.out.println("...");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
latch.countDown();
}
}
    1. import java.util.concurrent.BrokenBarrierException;
    2. import java.util.concurrent.CyclicBarrier;
    3. import java.util.concurrent.TimeUnit;
    4. import java.util.concurrent.TimeoutException;
    5. public class TestCyclicBarrier extends Thread {
    6. /**
    7. * CyclicBarrier 和CountDownLatch不同,CyclicBarrier是当await 的数量达到了设置的数量后,
    8. * 才继续往下执行
    9. */
    10. static CyclicBarrier cyclicBarrier = new CyclicBarrier(10);
    11. private int id;
    12. public TestCyclicBarrier(int id) {
    13. this.id = id;
    14. }
    15. public static void main(String[] args) {
    16. long start = System.currentTimeMillis();
    17. int i = 0;
    18. while (i < 10) {
    19. i++;
    20. new TestCyclicBarrier(i).start();
    21. }
    22. System.out.println("use time:" + (System.currentTimeMillis() - start));
    23. }
    24. public void run() {
    25. try {
    26. System.out.println("----start:" + id);
    27. cyclicBarrier.await(1000, TimeUnit.MILLISECONDS);
    28. System.out.println("----start__:" + id);
    29. } catch (InterruptedException e1) {
    30. e1.printStackTrace();
    31. } catch (BrokenBarrierException e) {
    32. e.printStackTrace();
    33. } catch (TimeoutException e) {
    34. e.printStackTrace();
    35. }
    36. try {
    37. Thread.sleep(100);
    38. } catch (InterruptedException e) {
    39. e.printStackTrace();
    40. }
    41. System.out.println("----end:" + id);
    42. }
    43. }

CountDownLatch和CyclicBarrier 的用法的更多相关文章

  1. CountDownLatch和CyclicBarrier区别及用法的demo

    javadoc里面的描述是这样的. CountDownLatch: A synchronization aid that allows one or more threads to wait unti ...

  2. 温故知新-多线程-forkjoin、CountDownLatch、CyclicBarrier、Semaphore用法

    Posted by 微博@Yangsc_o 原创文章,版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0 文章目录 摘要 forkjoin C ...

  3. Java并发编程:CountDownLatch、CyclicBarrier和Semaphore

    Java并发编程:CountDownLatch.CyclicBarrier和Semaphore 在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch ...

  4. Java并发(8):CountDownLatch、CyclicBarrier、Semaphore、Callable、Future

    CountDownLatch.CyclicBarrier.Semaphore.Callable.Future  都位于java.util.concurrent包下,其中CountDownLatch.C ...

  5. CountDownLatch、CyclicBarrier和Semaphore

    转载:http://www.cnblogs.com/dolphin0520/p/3920397.html 在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDown ...

  6. 使用Java辅助类(CountDownLatch、CyclicBarrier、Semaphore)并发编程

    在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法 一.C ...

  7. CountDownLatch 和 CyclicBarrier 的运用及实现原理

    I.CountDownLatch 和 CyclicBarrier 的运用 CountDownlatch: 定义: 其是一个线程同步的辅助工具,通过它可以做到使一条线程一直阻塞等待,直到其他线程完成其所 ...

  8. Java并发之CountDownLatch、CyclicBarrier和Semaphore

    CountDownLatch 是能使一组线程等另一组线程都跑完了再继续跑:CyclicBarrier 能够使一组线程在一个时间点上达到同步,可以是一起开始执行全部任务或者一部分任务. CountDow ...

  9. Thread.join(), CountDownLatch、CyclicBarrier和 Semaphore区别,联系及应用

    在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法, 由于 ...

随机推荐

  1. python 基础之while无限循环

    用户登录程序 username = "chenxi" passwed = "testki" counter = 0 while counter < 3: ...

  2. Python 生成器和协程

    Python3 迭代器与生成器 迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访 ...

  3. C++中malloc / free 和 new / delete 的区别?

    1.malloc/free 是C++/C语言的标准库函数,New/delete是C++运算符:都是用于申请动态内存和释放内存. 2.new做两件事:分配内存和调用类的构造函数,delete是:调用类的 ...

  4. webservice基础

    一.webservice概念 webservice用于异构平台之间的交互,我用Java写的程序,可以用php..net.pythod等其它语言的程序来访问我的接口.webservice有很多框架帮我们 ...

  5. Java基础面试操作题: File IO 文件过滤器FileFilter 练习 把一个文件夹下的.java文件复制到另一个文件夹下的.txt文件

    package com.swift; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File ...

  6. 如何使用公网ip访问部署在云服务器的web项目

    我使用的是华为云服务器,已经在服务器上部署好项目,现在想要通过外网访问服务器的话,需要配置一下安全组:1.依据下图找到安全组,点击教我设置: 2. 进入安全组配置示例,根据自己的需要选择不同的配置方案 ...

  7. [BZOJ] 1441 Min

    题意:给一堆数ai,求S=Σxiai,使得S最小且为正整数 根据裴蜀定理,一定存在ax+by=gcd(a,b),同理可以推广到n个整数 也就是说,在不考虑正负的情况下,所有数的gcd就是所求 #inc ...

  8. 如何用纯 CSS 和 D3 创作一艘遨游太空的宇宙飞船

    效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/oMqNmv 可交互视频 ...

  9. thinkcmf5更新模板代码分析,解决模板配置json出错导致数据库保存的配置项内容丢失问题

    private function updateThemeFiles($theme, $suffix = 'html') { $dir = 'themes/' . $theme; $themeDir = ...

  10. 【netbeans】【ubuntu】ubuntu netbeans 抗锯齿化修复

    每一个在ubuntu下用netbeans的,都会对它的字体怎么会显示的那么难看表示很不理解.我就是因此几乎没有用netbeans的.   不过今天终于解决问题了,虽然没有eclipse显示的那么漂亮, ...