• CountDownLatch的介绍

    类CountDownLatch是同步功能得一个辅助类,使用效果就是给定一个计数,当使用CountDownLatch类的线程判断计数不为0时,则呈wait状态,如果是0则继续运行。

    实现等待与继续运行的效果分别需要使用awit()和countDown()方法来进行。调用awit()方法时判断计数是否为0,如果不为0则呈等待状态。其他线程可以调用countDown()方法将计数减1,当计数减到0时,呈等待的线程继续运行。需要特别说明的是,计数无法被重置。

  • 实例

    模拟田径比赛,运动员准备

  

package com.wjg.unit_2_1_2;

import java.util.concurrent.CountDownLatch;

public class Run {
public static void main(String[] args) throws InterruptedException {
CountDownLatch maxRunner = new CountDownLatch(10);
Run run = new Run();
for (int i = 0; i < maxRunner.getCount(); i++) {
MyThread thread = run.new MyThread(maxRunner);
thread.setName("运动员"+(i+1));
thread.start();
}
maxRunner.await();
System.out.println("全部到了"); } public class MyThread extends Thread{
private CountDownLatch maxRunner; public MyThread(CountDownLatch maxRunner) {
super();
this.maxRunner = maxRunner;
} @Override
public void run() {
try {
Thread.sleep(2000);
System.out.println(this.getName()+"到了");
maxRunner.countDown();
} catch (InterruptedException e) {
e.printStackTrace();
} } }
} 运行结果: 运动员4达到了
运动员5达到了
运动员2达到了
运动员10达到了
运动员3达到了
运动员9达到了
运动员8达到了
运动员1达到了
运动员7达到了
运动员6达到了

全部到了    
  • 方法awit(long timeout,TimeUnit unit)

    作用是使线程在指定的最大时间单位内进入WAITING状态,如果超过这个时间则自动唤醒,程序继续向下执行。    

  • 方法getCount()

    获取当前CountDownLatch的值。

多线程编程(三)-CountDownLatch的使用的更多相关文章

  1. java 多线程编程三种实现方式

    一种是继承Thread类,一种是实现Runable接口,还有一种是实现callable接口: 有博主说只有前面2种方式,我个人愚见是三种,主要详细介绍下callable的使用: 三种线程的我的个人理解 ...

  2. UNIX环境编程学习笔记(28)——多线程编程(三):线程的取消

    lienhua342014-11-24 1 取消线程 pthread 提供了pthread_cancel 函数用于请求取消同一进程中的其他线程. #include <pthread.h> ...

  3. Android中多线程编程(三)Handler更新UI的方式

    Handler更新UI的方式和原因以及遇到的问题 1.方式: 仅仅能通过Handler来更新UI. 代码例如以下: package com.chengdong.su.handlerdemo; impo ...

  4. 多线程编程<三>

    1 /** 2 * 线程的暂停.恢复和停止 3 * @author Administrator 4 * 5 */ 6 public class ThreadControlDemo { 7 public ...

  5. python 多线程编程

    这篇文章写的很棒http://blog.csdn.net/bravezhe/article/details/8585437 使用threading模块实现多线程编程一[综述] Python这门解释性语 ...

  6. Python:使用threading模块实现多线程编程

    转:http://blog.csdn.net/bravezhe/article/details/8585437 Python:使用threading模块实现多线程编程一[综述] Python这门解释性 ...

  7. Java多线程编程实战指南(核心篇)读书笔记(三)

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76686044冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...

  8. 5天玩转C#并行和多线程编程 —— 第三天 认识和使用Task

    5天玩转C#并行和多线程编程系列文章目录 5天玩转C#并行和多线程编程 —— 第一天 认识Parallel 5天玩转C#并行和多线程编程 —— 第二天 并行集合和PLinq 5天玩转C#并行和多线程编 ...

  9. C++多线程编程(三)线程间通信

    多线程编程之三——线程间通讯 作者:韩耀旭 原文地址:http://www.vckbase.com/document/viewdoc/?id=1707 七.线程间通讯 一般而言,应用程序中的一个次要线 ...

随机推荐

  1. Android-操作系统拨打电话广播的处理

    Android操作系统的 packages/apps/phone/AndroidManifest.xml源码阅读 在之前的博客,Android-隐式意图激活操作系统通话界面,讲解了,阅读Android ...

  2. leetcode 回文数

    判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向 ...

  3. 虚拟机安装MAC OS X 10.9与Windows 7共享文件夹的方法

    在虚拟机中安装好MAC OS X后, 把CD/DVD中的ISO映像换成 VMwareWorkstation安装目录下的/darwin.iso, 然后连接上 进入MAC 系统后, 先安装vmware t ...

  4. mac下wordpress环境搭建

    mac下本来就有apache和php,只需要配置以下+安装mysql 1.Apache 预装目录在  /etc/apache2: 默认的网站目录在 /Library/WebServer/Documen ...

  5. SpringBoot :docker

    Docker 是一个开源的应用容器引擎 docker官方网站:https://hub.docker.com/ $部署docker到Linux系统 1.准备一个Linux系统的虚拟机或者物理机 本例所使 ...

  6. jQuery--事件, 事件绑定, 阻止事件冒泡, 事件委托,页面载入后函数

    1.常用事件, 按住shift键实现同步选择效果,搜索框联想效果 2.阻止事件冒泡 3.事件委托 4.使用 $(document).ready(function (){...}) 实现文件加载完绑定事 ...

  7. 201621123023《Java程序设计》第8周学习总结

    一.本周学习总结 二.书面作业 1. ArrayList代码分析 1.1 解释ArrayList的contains源代码 由图可知,传入参数后调用indexOf函数来判断是否存在,会循环整个eleme ...

  8. Gogland编译Syncthing!

    说明:我仅仅以这个Syncthing工程为例,来说明如何正确使用Goland编译其他人写的工程,应该具有普遍意义,看懂这篇博客,你想用Gogland去编译其他人的工程,应该不是问题!! Syncthi ...

  9. java学习笔记—web计算器(36)

    MVC模式 模式主要的任务是帮助开发者解决一类问题. MVC模式主要是用于规划你的网站的开发的一个基本的结构. Servlet记住充当的是控制器层.cn.itcast.controller Java类 ...

  10. 洛谷P3676 小清新数据结构题(动态点分治+树链剖分)

    传送门 感觉这题做下来心态有点崩……$RMQ$求$LCA$没有树剖快我可以理解为是常数太大……然而我明明用了自以为不会退化的点分然而为什么比会退化的点分跑得反而更慢啊啊啊啊~~~ 先膜一波zsy大佬 ...