简介

java异步任务相关的工具。主要用在某些线程需要等到其他线程完成某些操作后才能执行的场景。

等待线程需要显示的调用wait方法,表示线程当前挂起,需要等到countdownLatch到0才执行。另一些线程调用countDown对countDownLatch - 1,达到0时则调用wait方法的线程得到执行。

小故事

小明去吃铁板烧快餐,来到窗口后他发现都是旧菜但是他希望吃刚煮好的。经过交谈后师傅承诺之前的菜卖完就给他煮新的,这个时候小明就占据了这个窗口,其他窗口则继续卖菜。终于旧菜卖完了小明也拿到了新的菜,愉快的吃起了饭。

这里窗口就是线程数,小明所在窗口需要其他窗口把旧菜卖完才能有新的菜,小明所在的线程是挂起的,其他窗口每卖一份就对这个菜减一。菜的量就是CountDownLatch。

DEMO

package calvin;

import java.util.Random;
import java.util.concurrent.CountDownLatch; public class TestCountDownLatch {
public static void main(String[] args){
CountDownLatch latch = new CountDownLatch(2);
Window win = null;
for(int i =0; i< 4; i ++){
win = new Window(latch);
new Thread(win).start();
}
System.out.println("wait");
try {
latch.await();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("down");
} public static class Window implements Runnable{
private CountDownLatch latch = null;
public Window(CountDownLatch latch){
this.latch = latch;
} @Override
public void run(){
int time = new Random().nextInt(5) * 1000;
try {
Thread.sleep(time);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("thread = " + Thread.currentThread().getName());
latch.countDown();
}
}
}
// 运行结果:
wait
thread = Thread-1
thread = Thread-0
down
thread = Thread-3
thread = Thread-2

小结

CountDonwLatch可以用作一个计数器。主要用在某个线程需要等待某个事件发生后才能被执行的地方。

【Coucurrency-CountDownLatch】-20161203-0002的更多相关文章

  1. 【GOF23设计模式】单例模式

    来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_单例模式.应用场景.饿汉式.懒汉式 1.GOF23设计模式  2.单例模式  3.饿汉式  1 package com.t ...

  2. 【性能诊断】十一、性能问题综合分析(案例2,windbg、wireshark)

    [问题描述]:       前段时间有一项目反馈,常用的审批功能有时的响应较慢,多个管理员功能不定期的出现客户端无响应的状况,并且管理员功能一旦出现卡死,也会影响到普通的业务用户致使很多用户无法操作. ...

  3. 【JVM虚拟机】(7)---深入理解Class中-属性集合

    #[JVM虚拟机](7)---深入理解Class中-属性集合 之前有关class文件已经写了两篇博客: 1.[JVM虚拟机](5)---深入理解JVM-Class中常量池 2.[JVM虚拟机](6)- ...

  4. 【JVM虚拟机】(6)---深入理解Class中访问标志、类索引、父类索引、接口索引

    JVM(6)访问标志,类索引 上一篇博客讲[JVM虚拟机](5)---深入理解JVM-Class中常量池 我们知道一个class文件正常可以分为7个部分: 魔数与class文件版本 常量池 访问标志 ...

  5. 【并发编程】【JDK源码】J.U.C--AQS 及其同步组件(2/2)

    原文:慕课网高并发实战(七)- J.U.C之AQS 在[并发编程][JDK源码]AQS (AbstractQueuedSynchronizer)(1/2)中简要介绍了AQS的概念和基本原理,下面继续对 ...

  6. 【精解】EOS TPS 多维实测

    本文主要研究EOS的tps表现,会从插件.cleos.EOSBenchTool以及eosjs四种方式进行分析研究. 关键字:eos, tps, cleos, txn_test_gen_plugin, ...

  7. 【RL系列】马尔可夫决策过程——状态价值评价与动作价值评价

    请先阅读上两篇文章: [RL系列]马尔可夫决策过程中状态价值函数的一般形式 [RL系列]马尔可夫决策过程与动态编程 状态价值函数,顾名思义,就是用于状态价值评价(SVE)的.典型的问题有“格子世界(G ...

  8. 【面试题】2018年最全Java面试通关秘籍汇总集!

    [面试题]2018年最全Java面试通关秘籍汇总集!(转载于互联网)   前几天在交流群里有些小伙伴问面试相关的试题,当时给出了一些问题,苦于打字太累就没写下去了,但觉得这是一个很不负责任的表现,于是 ...

  9. 【并发编程】Future模式添加Callback及Promise 模式

    Future Future是Java5增加的类,它用来描述一个异步计算的结果.你可以使用 isDone 方法检查计算是否完成,或者使用 get 方法阻塞住调用线程,直到计算完成返回结果.你也可以使用  ...

  10. SQL语句复习【专题三】

    SQL语句复习[专题三] DML 数据操作语言[insert into update delete]创建表 简单的方式[使用查询的结果集来创建一张表]create table temp as sele ...

随机推荐

  1. Vue2全家桶之二:vue-router(路由)详细教程,看这个就够了

     作者:东西里本文转载于:https://www.jianshu.com/p/514c7588e877来源:简书 转载仅供自己日后看方便.  由于Vue在开发时对路由支持的不足,于是官方补充了vue- ...

  2. django虚拟环境安装

    虚拟环境主要是防止不同版本的模块之间的冲突,维护多个项目的时候这个非常重要. 虚拟环境的安装 sudo apt install python-virtualenv 虚拟环境安装成功后,直接创建一个虚拟 ...

  3. windows重叠I/O模型

    重叠I/O就相当于异步I/O. 一.重叠I/O的I/O完成确认 1.使用事件对象 接收端: #include <stdio.h> #include <stdlib.h> #in ...

  4. css--父元素塌陷

    当父元素内都是漂浮元素时,会造成父高度塌陷的问题.(因为等同于父元素内容为空,所以长,宽都等于空) 我们想要的页面结构是: <!DOCTYPE html> <html lang=&q ...

  5. HFun.快速开发平台(五)=》自定义系统数据选择

    本篇介绍HFun.快速开发平台的另一项系统常用功能:系统数据或参数选择,主要应用在表单录入中信息的选择,如类别,编号等.先贴出本系统实现的页面效果: 如上图所示,系统中将参数的选择统一展现为该方式,开 ...

  6. oralce定时任务

    oracle定时任务(dbms_job) author:skate time:2007-09-12 http://publish.it168.com/2006/0311/20060311017002. ...

  7. springboot-mybatis多数据源以及踩坑之旅

    首先,springboot项目结构如下 springboot配置文件内容如下 动态数据源的配置类如下(必须保证能被ComponentScan扫描到): 1 package com.letzgo.con ...

  8. abstract、final和native几大注意点

    变量不能被defalut修饰 native修饰方法,native修饰的方法简单来说就是:一个Java方法调用了一个非Java代码的接口.定义navtive方法时,并不提供实现体,因为其实现体是用非Ja ...

  9. 几个常用内核函数(《Windows内核情景分析》)

    参考:<Windows内核情景分析> 0x01  ObReferenceObjectByHandle 这个函数从句柄得到对应的内核对象,并递增其引用计数. NTSTATUS ObRefer ...

  10. spring 定时任务执行2次

    eclipse 上定时任务执行没有问题,生产环境可以看到定时任务同时执行了2次,排除代码原因,网上找了些资料,最后发现是tomcat的原因, Host 节点中有一个appBase 属性指向了webap ...