博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CountDownLatch
阅读量:6231 次
发布时间:2019-06-21

本文共 1843 字,大约阅读时间需要 6 分钟。

hot3.png

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

用给定的计数 初始化 CountDownLatch。由于调用了 countDown() 方法,所以在当前计数到达零之前,await 方法会一直受阻塞。
之后,会释放所有等待的线程,await 的所有后续调用都将立即返回。这种现象只出现一次——计数无法被重置。如果需要重置计数,请考虑使用 CyclicBarrier。
CountDownLatch 是一个通用同步工具,它有很多用途。将计数 1 初始化的 CountDownLatch 用作一个简单的开/关锁存器,
或入口:在通过调用 countDown() 的线程打开入口前,所有调用 await 的线程都一直在入口处等待。
用 N 初始化的 CountDownLatch 可以使一个线程在 N 个线程完成某项操作之前一直等待,或者使其在某项操作完成 N 次之前一直等待。
CountDownLatch 的一个有用特性是,它不要求调用 countDown 方法的线程等到计数到达零时才继续,
而在所有线程都能通过之前,它只是阻止任何线程继续通过一个 await。 
一下的例子是别人写的,非常形象。

package com.lzs.concurrent;import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * Created by zaish on 2016-4-4. */public class TestCountDownLatch {    public static void main(String[] args) throws InterruptedException{        // 开始的倒数锁        final CountDownLatch begin = new CountDownLatch(1);        // 结束的倒数锁        final CountDownLatch end = new CountDownLatch(10);        // 十名选手        final ExecutorService exec = Executors.newFixedThreadPool(10);        for (int index = 0; index < 10; index++) {            final int NO = index + 1;            Runnable run = new Runnable() {                public void run() {                    try {                        begin.await();//一直阻塞                        Thread.sleep((long) (Math.random() * 10000));                        System.out.println("No." + NO + " arrived");                    } catch (InterruptedException e) {                    } finally {                        end.countDown();                    }                }            };            exec.submit(run);        }        System.out.println("Game Start");        begin.countDown();        end.await();        System.out.println("Game Over");        exec.shutdown();    }}

转载于:https://my.oschina.net/firstBlooded/blog/652395

你可能感兴趣的文章
StringUtils常用方法+StringUtils详细介绍
查看>>
iOS开发之JSON解析
查看>>
iOS开发之Run Loop
查看>>
PDF 补丁丁 0.5.0.2731 发布(增加去除页面表单和链接水印功能)
查看>>
PDF 补丁丁 0.6.0.3355 版发布(修复阅读模式、书签缩放的问题)
查看>>
python 内嵌模块——time
查看>>
关于form与表单操作
查看>>
网络协议
查看>>
同源策略
查看>>
Date——时间戳转化为YYYY-MM-DD h:m:s时间格式
查看>>
MySQL_PHP学习笔记_2015_0907_PHP用pdo连接数据库时报错 could not find driver
查看>>
字符类型
查看>>
Algs4-1.1.5位于0与1之间则打印true,否则打印false
查看>>
分布式存储 FastDFS-5.0.5线上搭建
查看>>
[Java 基础]ResultSet 指定field映射到Pojo对象的Map
查看>>
Oracle 11g OCM 考试大纲
查看>>
华为 题目大数据计算器
查看>>
学会了怎么推矩阵啊哈哈哈哈哈
查看>>
web开篇
查看>>
day7CSS
查看>>