首页 > 编程语言 > 详细

CountDownLatch等待多线程完成

时间:2016-04-01 02:09:20      阅读:208      评论:0      收藏:0      [点我收藏+]

一:CountDownLatch
? CountDownLatcn类位于java.util.concurrent包下,它允许一个或者多个线程等待其他线程完成操作。
? CountDownLatch类只提供了一个构造器:
? public CountDownLatch(int count);参数count可以理解为计数器的值
? 其余几个方法如下:
? await():调用await()方法的线程会被挂起,它会等待直到count值为0才继续执行;
? await(long timeout, TimeUnit unit):等待一定的时间后count值还没变为0的话就会继续执行;
?? countDown():将count的值-1;
二:举例说明
??? 主线程等待,必须当2个子线程运行完成后,才运行主线程继续执行
public class CountDownLatchExample {
? public static void main(String[] args) {
?? final CountDownLatch latch = new CountDownLatch(2);
?? new Thread(new Runnable() {
???? @Override
???? public void run() {
???? System.out.println("第一个子线程运行开始:" + System.currentTimeMillis());
??????? try {
?????????? Thread.sleep(1000);
????????? } catch (InterruptedException e) {
??????????? e.printStackTrace();
????????? }
??? System.out.println("第一个子线程运行结束:" + System.currentTimeMillis());
??????? latch.countDown();??
????? }
???? }).start();
?? new Thread(new Runnable() {
??? @Override
??? public void run() {
???? System.out.println("第二个子线程运行开始:" + System.currentTimeMillis());
??????? try {
????????? Thread.sleep(1000);
????????? } catch (InterruptedException e) {
?????????? e.printStackTrace();
????????? }
???? System.out.println("第二个子线程运行结束:" + System.currentTimeMillis());
???????? latch.countDown();
???? }
?? }).start();
??? try {
???? latch.await();
?? System.out.println("子线程运行结束,主线程开始" + System.currentTimeMillis());
???? } catch (InterruptedException e) {
????????? e.printStackTrace();
???? }
?? }
}
运行结果如下:
?? 第一个子线程运行开始:1458950519770
?? 第二个子线程运行开始:1458950519770
?? 第二个子线程运行结束:1458950520784
?? 第一个子线程运行结束:1458950520784
?? 子线程运行结束,主线程开始1458950520784
可以看到,当2个子线程运行结束了,main线程才开始执行。

CountDownLatch等待多线程完成

原文:http://tanjie090508.iteye.com/blog/2287673

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!