一、CountDownLatchDemo

package com.duchong.concurrent;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CountDownLatch; /*
* CountDownLatch :阻塞主线程,等子线程完成
*/
public class CountDownLatchDemo { /**
* 存放子线程产生的结果
*/
private static ConcurrentHashMap<String,Integer> resultMap =new ConcurrentHashMap<>(); public static void main(String[] args) { final CountDownLatch latch = new CountDownLatch(5); SubThread subThread = new SubThread(latch); for (int i = 0; i <=4; i++) {
new Thread(subThread).start();
}
try {
//阻塞主线程
latch.await();
}
catch (InterruptedException e) {
} //计算总结果
int sum=0;
for(Map.Entry<String,Integer> subNumber:resultMap.entrySet()){
sum +=subNumber.getValue();
}
System.out.println("sum = "+sum);
} /**
* 子线程
*/
static class SubThread implements Runnable { private CountDownLatch latch; public SubThread(CountDownLatch latch) {
this.latch = latch;
} @Override
public void run() { String name = Thread.currentThread().getName();
try {
int number = RandomUtil.getNumber();
System.out.println(name+"---number:"+number);
resultMap.put(name,number);
}
finally {
latch.countDown();
} } }
}

二、CyclicBarrierDemo

package com.duchong.concurrent;

import java.util.Map;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CyclicBarrier; /*
* CyclicBarrier :阻塞子线程,当等待中的子线程数到达一定数量时,跳闸。
*/
public class CyclicBarrierDemo { /**
* 屏障,初始5 当await()的线程数量达到5时,跳闸。
*/
static CyclicBarrier c = new CyclicBarrier(5,new SumThread()); /**
* 存放子线程产生的结果
*/
private static ConcurrentHashMap<String,Integer> resultMap =new ConcurrentHashMap<>(); public static void main(String[] args) { //模拟四个子线产生随机数值
for(int i=0;i<=4;i++){
new Thread(new SubThread()).start();
}
} /**
* 所有子线程等待数等于5时,执行
*/
private static class SumThread implements Runnable{ @Override
public void run() {
int result =0;
for(Map.Entry<String,Integer> workResult:resultMap.entrySet()){
result = result+workResult.getValue();
}
System.out.println("result = "+result);
}
} /**
* 子线程
*/
static class SubThread implements Runnable{ @Override
public void run() { String name = Thread.currentThread().getName(); int number = RandomUtil.getNumber();
System.out.println(name+"---number:"+number); resultMap.put(name,number); try {
//阻塞子线程
c.await();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
} }
} }

CountDownLatch和CyclicBarrier使用上的区别的更多相关文章

  1. CountDownLatch、CyclicBarrier、Semaphore的区别

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

  2. Java的CountDownLatch和CyclicBarrier的理解和区别

    CountDownLatch和CyclicBarrier的功能看起来很相似,不易区分,有一种谜之的神秘.本文将通过通俗的例子并结合代码讲解两者的使用方法和区别. CountDownLatch和Cycl ...

  3. CountDownLatch与CyclicBarrier的使用与区别

    CountDownLatch的介绍和使用: 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待. 用给定的计数 初始化 CountDownLatch.由于调用了 co ...

  4. java 并发包JUC下的CountDownLatch和CyclicBarrier的理解和区别

    推荐这篇帖子,讲得不错~ https://blog.csdn.net/liangyihuai/article/details/83106584

  5. java高并发之CountDownLatch,CyclicBarrier和join

    晚上打车回家,在车上看到一篇文章<22岁大学生获谷歌天价Offer,年薪千万!>,讲的是印度一个22岁大学生多次参加ACM大赛,开源多个项目,以非常牛逼的履历通过了谷歌的AI测试,斩获谷歌 ...

  6. CountDownLatch和CyclicBarrier的区别

    [CountDownLatch.CyclicBarrier和Semaphore]http://www.cnblogs.com/dolphin0520/p/3920397.html   [CountDo ...

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

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

  8. JUC之CountDownLatch和CyclicBarrier的区别 (转)

    CountDownLatch和CyclicBarrier的功能看起来很相似,不易区分,有一种谜之的神秘.本文将通过通俗的例子并结合代码讲解两者的使用方法和区别. CountDownLatch和Cycl ...

  9. CountDownLatch和CyclicBarrier的区别(转)

    在网上看到很多人对于CountDownLatch和CyclicBarrier的区别简单理解为CountDownLatch是一次性的,而CyclicBarrier在调用reset之后还可以继续使用.那如 ...

随机推荐

  1. greenplum 下载地址

    一.推荐使用下面下载地址 https://network.pivotal.io/products/pivotal-gpdb#/releases/158026/file_groups/1083 二.官网 ...

  2. 使用jquery修改display属性

    var show = $('#test').css('display'); $('#test').css('display',show =='block'?'none':show); 这段代码通过判断 ...

  3. learning java AWT 绝对定位

    import javax.swing.*; import java.awt.*; public class NullLayoutTest { Frame f = new Frame("测试窗 ...

  4. saltstack 基础模块

    Salt 在 linux 系统下 基础操作 1.更改权限 # salt 2.更改用户 # salt '172.16.3.9' file.chown /root/test test test 3.复制文 ...

  5. H - Almost Union-Find

    //带删除操作的并查集 //题意:给你一个1~n的集合,有三种操作 // 1: 把p和q所在的集合合并 //2:把p移到q所在的集合中 //3:返回p所在集合中的元素个数和元素的和 //第二种操作不能 ...

  6. Java枚举类接口实战

    枚举类可以实现一个或多个接口.与普通类实现接口完全一样,枚举类实现接口时,需要实现该接口所包含的方法. 如果需要每个枚举值在调用同一个方法时呈现不同的行为,则可以让每个枚举值在{...}匿名块中实现自 ...

  7. JVM 字节码的结构

    编译的.class文件,可以用javap进行反编译 javap Test.class javap -c Test.class javap -verbose Test.class 1.创建MyTest1 ...

  8. socat管理haproxy配置 ssh-keygen -N '' -t rsa -q -b 2048

    socat管理haproxy配置   haproxy是可以通过socat命令管理haproxy.cfg文件的:1.安装socat yum install socat -y 2.配置haproxy.cf ...

  9. wrod: 突然无法输入汉字

    “文件”-“选项”-“高级”-“去掉 输入法控制处于活动状态复选框”.

  10. 001 安装mysql

    在安装docker之后,安装一个mysql的容器试试手.可以参考违章: URL: https://www.cnblogs.com/limingxie/p/8655457.html