并发编程(CountDownLatch使用)
一.简介:
Latch意思是:门闩的意思,形象的来说await就是拴上门闩,等到门闩释放后当前线程开始工作。
下面是来自简书上的解释:
CountDownlatch
是一个多功能的同步工具,可以被用于各种目的。一个CountDownLatch
通过一个值为1的count
被初始化,来作为一个开/关的门或门闩:所有调用了await()
的线程都会在门前等待,直到门被一个线程通过调用countDown()
打开。一个被初始化为N的CountDownLatch
可以被用来“在N个线程都完成了某种操作(或者一些操作已经被完成了N次)之后创建一个线程”。
CountDownLatch
一个有用的属性就是它不需要线程们在继续执行之前,调用countDown
来等待count
被减到0。它简单地阻止了任何调用了await()
的线程继续,直到所有的线程都能够通过。
二.实例:
- import java.util.concurrent.CountDownLatch;
- /**
- * Created by cuijunyong on 2018/2/3.
- */
- public class Xunhuan {
- public static int i = 0;
- private static final CountDownLatch end = new CountDownLatch(2);
- private static final CountDownLatch start = new CountDownLatch(1);
- public static void main(String[] args) throws Exception{
- A a = new A();
- // A b = new A();
- MyThread myThread = new MyThread();
- Thread b = new Thread(myThread);
- // Thread[] threads = new Thread[10];
- // for(int x = 0; x < threads.length; x++){
- // threads[i] = new Thread(myThread);
- // threads[i].start();
- // }
- a.start();
- b.start();
- System.out.println("开始工作了\n");
- start.countDown();
- end.await();
- System.out.println("a:" + a.isAlive());
- System.out.println("b:" +b.isAlive());
- System.out.println("i=" + i);
- }
- static class MyThread implements Runnable{
- public void run() {
- // int i = 0;
- try {
- start.await();
- int j = 0;
- while (j < 100){
- j++;
- i++;
- System.out.println("B = " + i);
- }
- System.out.println("end.count = " + end.getCount());
- end.countDown();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- static class A extends Thread{
- @Override
- public void run() {
- // int i = 0;
- try {
- start.await();
- int j = 0;
- while (j < 100){
- j++;
- i++;
- System.out.println("A = " + i);
- }
- System.out.println("end.count = " + end.getCount());
- end.countDown();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- }
结果:前面略略略
- A = 190
- A = 191
- A = 192
- A = 193
- A = 194
- A = 195
- B = 171
- end.count = 2
- B = 196
- B = 197
- B = 198
- B = 199
- B = 200
- end.count = 1
- a:false
- b:false
- i=200
并发编程(CountDownLatch使用)的更多相关文章
- Java并发编程-CountDownLatch
基于AQS的前世今生,来学习并发工具类CountDownLatch.本文将从CountDownLatch的应用场景.源码原理解析来学习这个并发工具类. 1. 应用场景 CountDownLatch是并 ...
- 高并发编程-CountDownLatch深入解析
要点解说 CountDownLatch允许一个或者多个线程一直等待,直到一组其它操作执行完成.在使用CountDownLatch时,需要指定一个整数值,此值是线程将要等待的操作数.当某个线程为了要执行 ...
- java并发编程CountDownLatch
/** * CountDownLatch用法 * CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能.比如有一个任务A, * 它要等待其他4 ...
- 【Java并发编程实战】-----“J.U.C”:CountDownlatch
上篇博文([Java并发编程实战]-----"J.U.C":CyclicBarrier)LZ介绍了CyclicBarrier.CyclicBarrier所描述的是"允许一 ...
- Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
Java并发编程:CountDownLatch.CyclicBarrier和Semaphore 在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch ...
- 并发编程 04——闭锁CountDownLatch 与 栅栏CyclicBarrier
Java并发编程实践 目录 并发编程 01—— ThreadLocal 并发编程 02—— ConcurrentHashMap 并发编程 03—— 阻塞队列和生产者-消费者模式 并发编程 04—— 闭 ...
- 使用Java辅助类(CountDownLatch、CyclicBarrier、Semaphore)并发编程
在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法 一.C ...
- 并发编程(三):从AQS到CountDownLatch与ReentrantLock
一.目录 1.AQS简要分析 2.谈CountDownLatch 3.谈ReentrantLock 4.谈消费者与生产者模式(notfiyAll/wait.si ...
- 并发编程(七)——AbstractQueuedSynchronizer 之 CountDownLatch、CyclicBarrier、Semaphore 源码分析
这篇,我们的关注点是 AQS 最后的部分,共享模式的使用.本文先用 CountDownLatch 将共享模式说清楚,然后顺着把其他 AQS 相关的类 CyclicBarrier.Semaphore 的 ...
- Java并发编程的4个同步辅助类(CountDownLatch、CyclicBarrier、Semaphore、Phaser)
我在<JDK1.5引入的concurrent包>中,曾经介绍过CountDownLatch.CyclicBarrier两个类,还给出了CountDownLatch的演示案例.这里再系统总结 ...
随机推荐
- BZOJ4543[POI2014]Hotel加强版——长链剖分+树形DP
题意参见BZOJ3522 n<=100000 数据范围增强了,显然之前的转移方程不行了,那么不妨换一种. 因为不能枚举根来换根DP,那么我们描述的DP方程每个点要计算三个点都在这个点的子树内的方 ...
- 2. Spring 的 HelloWorld
初学Spring,就先来写一个 Spring 的 HelloWorld 吧 1. 首先,新建一个 java Project(因为暂时不需要网页,所以就不用创建 web 项目了) 2. 导入 Sprin ...
- PAT-Top1002. Business (35)
在一个项目的截止日期之前,如果工期有空闲则可能可以开展其他项目,提高效益.本题考查动态规划.数组dp[i][t]表示在截止时间为t时,前i个项目工作安排能够产生的最大收益,而前i个项目的截止时间都不大 ...
- 线段树模板hdu 1166:敌兵布阵
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- JAVA自学笔记03
1.三目运算符 1)格式:(关系表达式)?表达式1:表达式2 true则执行表达式1,false则执行表达式2 @ 例题1 :求两数中的较大值 System.out.println(x>y?x: ...
- 透明Panel
unit TransparentPanel; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Varia ...
- Mysql查询特定值是哪些表哪些字段
摘自网上 -- 查询整个数据库中某个特定值所在的表和字段的方法 # flush tables; -- 创建表来存储查询结果 drop table if exists tmp_table; CREATE ...
- 终止java线程的2种方法
1.使用一个volatile的共享变量 2.使用interrupt方法 import java.util.concurrent.TimeUnit; /** * ThreadTest */ public ...
- BAT 删除隐藏文件
删除文件 del命令参数说明/F 强制删除文件./S 从所有子目录删除指定文件./Q 安静模式.删除全局通配符时,不要求确认./A 根据属性选择要删除的文件. 删除指 ...
- Docker在windows下的使用【二】
可参考学习地址: 极客学院docker教程,还不错,可以参考 1.Dockerhub下载镜像 下载地址:Dockerhub地址 有两种方式可以获得新的镜像 直接从dockerhub下载编译好的imag ...