java多线程[6]:CountDownLatch
来源:互联网 发布:怎么设定网络熟读 编辑:程序博客网 时间:2024/06/05 19:24
CountDown的意思是倒数,latch的意思是门锁。CountDownLatch大概可以理解为:倒数几个数之后,门就打开了。具体来讲,CountDownLatch的工作机制是:它内部维护了一个倒计时数字,每次调用countDown()
方法,这个数字就减一,当这个数字降为0后,门就开了。当一个线程调用它的await()
方法时,如果门没开(倒计时数字大于0)的话,则调用await方法的线程会挂起,直到门开后,该线程被唤醒然后继续运行。它的工作机制和Thread类的join方法有些类似。
来看一个例子。假设我在main方法中启动了好多个个工作者线程,我希望等这些工作者线程都运行结束了以后,main方法再退出。先来看工作者线程的代码
public class MyWorker implements Runnable { String name; CountDownLatch latch; public MyWorker(String workerName, CountDownLatch latch) { this.name = workerName; this.latch = latch; new Thread(this).start(); } @Override public void run() { for (int i = 0; i < 10; i++) { // do something here // ... try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(name + " exit"); latch.countDown(); }}
下面是main方法
public class CountDownLatchDemo { public static void main(String[] args) throws InterruptedException { int workerCount = 10; CountDownLatch latch = new CountDownLatch(workerCount); for (int i = 0; i < workerCount; i++) { new MyWorker("worker" + i, latch); } latch.await(); System.out.println("main thread exit"); }}
在main方法中初始化了一个CountDownLatch
对象,它的初始值是10,然后启动了10个worker thread,再然后调用latch.await()
等待门被打开。每个worker thread要工作很久,当工作结束后,会调用latch.countDown()
来倒数一个数,等到所有的worker thread都完成了自己的工作,CountDownLatch的门就打开了,此时main方法继续运行。最终,main方法所在的主线程要晚于所有工作者线程结束。
下面是这个demo的运行结果。每次运行输出的内容可能都不一样,但都是主线程最后才退出。
worker6 exitworker4 exitworker3 exitworker7 exitworker5 exitworker0 exitworker8 exitworker1 exitworker2 exitworker9 exitmain thread exit
阅读全文
0 0
- java多线程[6]:CountDownLatch
- Java多线程之CountDownLatch
- Java多线程之CountDownLatch
- java 多线程 CountDownLatch用法
- Java多线程之CountDownLatch
- JAVA多线程之CountDownLatch
- java 多线程 CountDownLatch用法
- Java多线程之CountDownLatch
- java 多线程 CountDownLatch用法
- java 多线程 CountDownLatch用法
- java 多线程 CountDownLatch用法
- Java多线程之CountDownLatch
- java 多线程 CountDownLatch用法
- java 多线程 CountDownLatch用法
- java 多线程 CountDownLatch用法
- java 多线程 CountDownLatch用法
- java 多线程协作CountDownLatch
- Java多线程之CountDownLatch
- pyqt5制作一键打开开发工具集的小工具
- Android简单Fragment切换
- Agilent EMpro2015(三维电磁仿真软件)官方版下载附安装教程
- Java并发编程基础
- Python使用datetime模块进行简单的日期换算与计算
- java多线程[6]:CountDownLatch
- Android移动开发-蓝牙(BlueTooth)设备检测连接的实现
- JSP
- popupwindow在android7.0出现全屏解决方案
- 类加载器&注解&动态代理
- 原生JS获取当前时间
- web笔记二:Tomcat的使用
- mysql5.7在windows7下my.ini文件加载路径及数据位置修改
- 【干货#016】小程序后端Bmob入门:获取第一行数据