文档章节

java 多线程 CountDownLatch用法

Albert-Liu
 Albert-Liu
发布于 2015/03/15 18:19
字数 450
阅读 34
收藏 0

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

主要方法

 public CountDownLatch(int count);

 public void countDown();

 public void await() throws InterruptedException
 

构造方法参数指定了计数的次数

countDown方法,当前线程调用此方法,则计数减一

awaint方法,调用此方法会一直阻塞当前线程,直到计时器的值为0

 

例子

Java代码  收藏代码

  1. public class CountDownLatchDemo {  

  2.     final static SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  

  3.     public static void main(String[] args) throws InterruptedException {  

  4.         CountDownLatch latch=new CountDownLatch(2);//两个工人的协作  

  5.         Worker worker1=new Worker("zhang san"5000, latch);  

  6.         Worker worker2=new Worker("li si"8000, latch);  

  7.         worker1.start();//  

  8.         worker2.start();//  

  9.         latch.await();//等待所有工人完成工作  

  10.         System.out.println("all work done at "+sdf.format(new Date()));  

  11.     }  

  12.       

  13.       

  14.     static class Worker extends Thread{  

  15.         String workerName;   

  16.         int workTime;  

  17.         CountDownLatch latch;  

  18.         public Worker(String workerName ,int workTime ,CountDownLatch latch){  

  19.              this.workerName=workerName;  

  20.              this.workTime=workTime;  

  21.              this.latch=latch;  

  22.         }  

  23.         public void run(){  

  24.             System.out.println("Worker "+workerName+" do work begin at "+sdf.format(new Date()));  

  25.             doWork();//工作了  

  26.             System.out.println("Worker "+workerName+" do work complete at "+sdf.format(new Date()));  

  27.             latch.countDown();//工人完成工作,计数器减一  

  28.   

  29.         }  

  30.           

  31.         private void doWork(){  

  32.             try {  

  33.                 Thread.sleep(workTime);  

  34.             } catch (InterruptedException e) {  

  35.                 e.printStackTrace();  

  36.             }  

  37.         }  

  38.     }  

  39.       

  40.        

  41. }  

 

输出:

Worker zhang san do work begin at 2011-04-14 11:05:11
Worker li si do work begin at 2011-04-14 11:05:11
Worker zhang san do work complete at 2011-04-14 11:05:16
Worker li si do work complete at 2011-04-14 11:05:19
all work done at 2011-04-14 11:05:19


本文转载自:http://www.iteye.com/topic/1002652

Albert-Liu
粉丝 7
博文 19
码字总数 12128
作品 0
深圳
架构师
私信 提问
java多线程系列:通过对战游戏学习CyclicBarrier

CyclicBarrier是java.util.concurrent包下面的一个工具类,字面意思是可循环使用(Cyclic)的屏障(Barrier),通过它可以实现让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一...

huangzd
2018/01/06
0
0
Java中高级面试必问之多线程TOP50(含答案)

以下为大家整理了今年一线大厂面试被问频率较高的多线程面试题,由于本人的见识局限性,所以可能不是很全面,也欢迎大家在后面留言补充,谢谢。 1、什么是线程? 2、什么是线程安全和线程不安...

老道士
2018/08/28
267
0
死磕 java同步系列之ReentrantLock VS synchronized——结果可能跟你想的不一样

问题 (1)ReentrantLock有哪些优点? (2)ReentrantLock有哪些缺点? (3)ReentrantLock是否可以完全替代synchronized? 简介 synchronized是Java原生提供的用于在多线程环境中保证同步的...

彤哥读源码
06/11
2.1K
6
15个顶级Java多线程面试题及回答

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

LCZ777
2014/05/27
645
0
java中高级大公司多线程面试题

1)在Java中Lock接口比synchronized块的优势是什么?你需要实现一个高效的缓存,它允许多个用户读,但只允许一个用户写,以此来保持它的完整性,你会怎样去实现它? lock接口在多线程和并发编...

java成功之路
2018/10/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

网站安全维护公司对渗透测试php后门分析

很多想做渗透测试的朋友都想了解关于PHP后门漏洞的安全测试重点方法,以及该如何预防被中php后门,本节由我们的Sine安全高级渗透工程师进行全面的讲解,来让大家更好的理解和了解php代码的安全...

网站安全
1分钟前
0
0
在github上创建代码仓库时忘记添加.gitignore文件或修改了.gitignore该怎么办?

#清除本地缓存(改变成未track状态) #git rm -r --cached . 表示清除项目中所有文件的本地缓存 git rm -r --cached xxx #xxx表示不想版本控制的文件,比如小编可以输入test.o #.gitignore中的...

博爱飞扬
2分钟前
0
0
Fsimage 与 EditLog定义及合并过程

有很多客户端在向 hdfs 中写数据,同时有很多客户端在查数据,这就涉及到一个响应速度问题。因为只有一个 namenode ,客户端在写的时候,必须迅速记下来。 1. 向 namenode 询问可以存储到哪些...

Garphy
5分钟前
0
0
TI KeyStone C66x开发板处理器、NAND FLASH、NOR FLASH

TL6678F-EasyEVM是广州创龙基于SOM-TL6678F核心板而研发的一款多核高性能DSP+FPGA开发板。开发板采用核心板+底板方式,底板采用沉金无铅工艺的8层板设计,尺寸为247.33mm*139.8mm,它为用户提...

Tronlong创龙
23分钟前
3
0
【2019年8月版本】OCP 071认证考试最新版本的考试原题-第13题

Choose the best answer. Examine this query: SELECT TRUNC (ROUND(156.00,-2),-1) FROM DUAL; What is the result? A) 16 B) 160 C) 150 D) 200 E) 100 Answer:D (解析:关键就是 round ......

oschina_5359
33分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部