文档章节

java并发包里的CountDownLatch的用法

汪林
 汪林
发布于 2014/06/18 10:47
字数 456
阅读 1794
收藏 6

CountDownLatch

官方的解释为:一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。

我们现在就把它理解为倒数计数器,什么是倒数计数器呢,通俗的理解就是这个计数器事先有一个初始计数,在这个计数减到0之前,所有的线程等待。

笔者今天早晨又看一则新闻说的高考“枪手”,看来每逢高考,“枪手”必火。那我们来模拟一下“枪手”的招募过程。假如我需要10个“枪手”,招募者一声令下,开始招募,我们开始在大学里张贴“招兵启示”,等到这10个“枪手”都到齐,开动大巴车把他们送到“战场”。

这里笔者需要大家注意两个地方:第一,招募人一声令下,开始招募。第一,只有等到10个“枪手“都到了才能开动大巴。

package com.core.countDownLatch;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class CountDownLatchTest {
    
    public static void main(String[] args) throws InterruptedException {
        
        //倒数计数器
        final CountDownLatch begin = new CountDownLatch(1);
        
        //倒数计数器
        final CountDownLatch end = new CountDownLatch(10);
        
        //十名枪手
        ExecutorService execu = Executors.newFixedThreadPool(10);
        
        //模拟招募10名枪手到齐后开动大巴,送往“战场”
        for(int i=0;i<10;i++){
            
            final int NO = i+1;
            
            Runnable r = new Runnable() {
                
                @Override
                public void run() {
                    
                    try {
                        
                        //等待招募者下令招募
                        begin.await();
                        
                        Thread.sleep((long) (Math.random()*10000));
                        
                        System.out.println("枪手:"+NO+"到了");
                        
                    } catch (InterruptedException e) {
                        
                        e.printStackTrace();
                        
                    }finally{
                        
                        //每到达一个枪手,计数器减1
                        end.countDown();
                    }
                }
            };
            
            execu.submit(r);
        }
        
        //begin倒数计数器减1为0,则开始下招募令,一声令下
        begin.countDown();
        
        System.out.println("开始招募。。。。");
        
        //等待所有的枪手到达
        end.await();
        
        //所有枪手到达
        System.out.println("所有枪手到达,开动大巴,送往目的地。。。。");
        
        execu.shutdown();
        
    
    }
}


© 著作权归作者所有

共有 人打赏支持
汪林
粉丝 7
博文 19
码字总数 8847
作品 0
海淀
程序员
Java并发编程:CountDownLatch、CyclicBarrier和Semaphore

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

明舞
2015/09/01
0
0
【Java并发专题】27篇文章详细总结Java并发基础知识

努力的意义,就是,在以后的日子里,放眼望去全是自己喜欢的人和事! github:https://github.com/CL0610/Java-concurrency,欢迎题issue和Pull request。所有的文档都是自己亲自码的,如果觉...

你听___
05/06
0
0
【转】15个顶级Java多线程面试题及回答

Java 线程面试问题   在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分。如果你想获得任何股票投资银行的前台资讯职位,那么你应该准备很多关于多线程的问题。在投资银行业务...

一只死笨死笨的猪
2014/09/30
0
0
15个顶级Java多线程面试题及回答

Java 线程面试问题 在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分。如果你想获得任何股票投资银行的前台资讯职位,那么你应该准备很多关于多线程的问题。在投资银行业务中多...

LCZ777
2014/05/27
0
0
Java Concurrency(三)——J.U.C AQS源码解读

java5之后的java.util.concurrent包是世界级并发大师Doug Lea的作品,里面主要实现了 atomic包里Integer/Long对应的原子类,主要基于CAS; 一些同步子,包括Lock,CountDownLatch,Semaphore...

谦谦君子
2015/01/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

day58-20180816-流利阅读笔记-待学习

苹果市值破万亿,iPhone 会涨价吗? Lala 2018-08-16 1.今日导读 苹果教父乔布斯曾经说过:“活着就是为了改变世界。”虽然他在 56 岁时就遗憾离世,但他极具创新和变革的精神早已深埋进苹果...

aibinxiao
20分钟前
4
0
[雪峰磁针石博客]python3快速入门教程1 turtle绘图-2函数

菲波那契序列: >>> # Fibonacci series:... # the sum of two elements defines the next... a, b = 0, 1>>> while b < 10:... print(b)... a, b = b, a+b...112......

python测试开发人工智能安全
今天
0
0
java环境变量配置最正确的方式

原贴:https://blog.csdn.net/qq_40007997/article/details/79784711,十分详细,亲测有效

kitty1116
今天
0
0
49.Nginx防盗链 访问控制 解析php相关 代理服务器

12.13 Nginx防盗链 12.14 Nginx访问控制 12.15 Nginx解析php相关配置(502的问题) 12.16 Nginx代理 扩展 502问题汇总 http://ask.apelearn.com/question/9109 location优先级 http://blog....

王鑫linux
今天
2
0
Nginx防盗链、访问控制、解析php相关配置、Nginx代理

一、Nginx防盗链 1. 编辑虚拟主机配置文件 vim /usr/local/nginx/conf/vhost/test.com.conf 2. 在配置文件中添加如下的内容 { expires 7d; valid_referers none blocked server_names *.tes......

芬野de博客
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部