并发包java.util.concurrent.CountDownLatch
/**
*
* @描述: 倒计时器 .
* 犹如倒计时计数器,调用CountDownLatch对象的countDown方法就将计数器减1,当计算器为0的时候
* 则所有等待者或单个等待者开始执行
* @作者: Wnj .
* @创建时间: 2017年5月15日 .
* @版本: 1.0 .
*/
public class CountdownLatchTest { public static void main(String[] args) {
ExecutorService service = Executors.newCachedThreadPool(); //吹口哨
final CountDownLatch cdOrder = new CountDownLatch(1); //等待结果
final CountDownLatch cdAnswer = new CountDownLatch(3);
for (int i = 0; i < 3; i++) {
Runnable runnable = new Runnable() {
public void run() {
try {
System.out.println("线程" + Thread.currentThread().getName() + "正准备接受命令");
//cdOrder=1所有线程进入等待,上面的out会打印
cdOrder.await();
System.out.println("线程" + Thread.currentThread().getName() + "已接受命令");
Thread.sleep((long)(Math.random() * 10000));
System.out.println("线程" + Thread.currentThread().getName() + "回应命令处理结果");
//cdAnswer=3
cdAnswer.countDown();
}
catch (Exception e) {
e.printStackTrace();
}
}
};
service.execute(runnable);
} //主线程
try {
Thread.sleep((long)(Math.random() * 10000)); System.out.println("线程" + Thread.currentThread().getName() + "即将发布命令");
////cdOrder=1 将cdOrder减1 = 0
cdOrder.countDown();
System.out.println("线程" + Thread.currentThread().getName() + "已发送命令,正在等待结果");
//cdAnswer= 3 cdAnser进入等待
cdAnswer.await();
System.out.println("线程" + Thread.currentThread().getName() + "已收到所有响应结果");
}
catch (Exception e) {
e.printStackTrace();
}
service.shutdown(); }
}
并发包java.util.concurrent.CountDownLatch的更多相关文章
- java.util.concurrent.CountDownLatch
闭锁是一种同步工具类,可以延迟线程的进度直到闭锁到达终止状态. 闭锁的作用相当于一扇门,在闭锁到达结束状态之前,这扇门一直是关闭的,任何线程都不能通过这扇门,当闭锁到达结束状态时,这扇门会打开并允许所 ...
- java.util.concurrent.CountDownLatch 使用
1. 概述 CountDownLatch是java的一个并发工具(java.util.concurrent.CountDownLatch), 闭锁. 主要功能是阻塞调用其await()方法的线程,直到 ...
- HashMap、Hashtable、ConcurrentHashMap、ConcurrentSkipListMap对比及java并发包(java.util.concurrent)
一.基础普及 接口(interface) 类(class) 继承类 实现的接口 Array √ Collection √ Set √ Collection List √ Collection Map ...
- java并发包java.util.concurrent详解
线程池ThreadPoolExecutor的使用 并发容器之CopyOnWriteArrayList 并发容器之CopyOnWriteArraySet 数据结构之ConcurrentHashMap,区 ...
- 并发包java.util.concurrent.locks.Lock
** * * @描述: Lock比传统线程模型中的synchronized方式更加面向对象.与生活中的锁类似,锁本身也应该是一个对象,两个线程执行的代码片段要实现同步互排的效果 * 它们必须用同一个L ...
- 014-并发编程-java.util.concurrent之-CountDownLatch
一.概述 CountDownLatch是JAVA提供在java.util.concurrent包下的一个辅助类,指定的一个或多个线程等待其他线程执行完成后执行. 能够使一个线程等待其他线程完成各自的工 ...
- java并发包工具(java.util.Concurrent)
一.CyclicBarrier 作用:所有线程准备好才进行,只要一条线程没准备好,都不进行 用法:所有线程准备好以后调用CyclicBarrier的await方法,然后主线程执行CyclicBarri ...
- java.util.concurrent.atomic 包详解
Atomic包的作用: 方便程序员在多线程环境下,无锁的进行原子操作 Atomic包核心: Atomic包里的类基本都是使用Unsafe实现的包装类,核心操作是CAS原子操作 关于CAS compar ...
- Java 并发工具包 java.util.concurrent 用户指南
1. java.util.concurrent - Java 并发工具包 Java 5 添加了一个新的包到 Java 平台,java.util.concurrent 包.这个包包含有一系列能够让 Ja ...
随机推荐
- 1076 Wifi密码 (15 分)
// 思路是网上以一位大神的,特简单直接采用字符串,判断长度,还有最后一个元素是否T,便可通过ASCll输出数字:#include <iostream> #include <stri ...
- [转] 用javascript修改css伪类的几种方法
用javascript修改css伪类的几种方法: Modify pseudo element styles with JavaScript http://pankajparashar.com/post ...
- hdu1509 优先队列
Windows Message Queue Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Ot ...
- Heap — 20181120
363. Trapping Rain Water public class Solution { /** * @param heights: a list of integers * @return: ...
- Linux误挂载到根目录出现问题!!!!!!!!!!!!!!!
一.背景: 因根目录/空间不大,故而想将另一硬盘挂载到根目录下(后发现此想法很是幼稚): 二.过程: 1.成功输入命令挂载后,发现出现/上被挂了两个东西,且/下剩余空间还是原来一样大,才发现大错特错: ...
- Linux mmap 要主动释放共享内存
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/sta ...
- AppInventor2笔记
将视觉化的 块语言 翻译为 Android上的实现 的编译器使用了Kawa语言框架,而Kawa是Scheme编程语言的方言,由Per Bothner开发,并由自由软件基金会发布,它是GNU操作系统的一 ...
- ansible 实战项目之文件操作(二)
一,前言 如果没有安装好的话看我以前的贴子哦!! 上次安装已经确定通了,所以下面步骤应该是完全ok的 特点: (1).轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可: (2 ...
- bind-named
main-book: http://www.zytrax.com/books/dns resolv.conf: http://dns-learning.twnic.net.tw/bind/intro4 ...
- apply、call、bind区别、用法
apply和call都是为了改变某个函数运行时的上下文而存在的(就是为了改变函数内部this的指向): 如果使用apply或call方法,那么this指向他们的第一个参数,apply的第二个参数是 ...