CountDownLatch浅析

本文介绍了CountDownLatch类的应用,这是一种同步工具类,通过计数机制实现主线程等待多个子线程完成的功能。示例代码展示了如何使用CountDownLatch确保两个工作线程结束后再执行后续操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CountDownLatch类是一个同步计数器,构造时传入int参数,该参数就是计数器的初始值,每调用一次countDown()方法,计数器减1,计数器大于0 时,await()方法会阻塞程序继续执行。

CountDownLatch可以看作是一个倒计数的锁存器,当计数减至0时触发特定的事件。利用这种特性,可以让主线程等待子线程的结束

使用场景:有一个任务想要往下执行,但必须要等到其他的任务执行完毕后才可以继续往下执行。

 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 
28         }
29         
30         private void doWork(){
31             try {
32                 Thread.sleep(workTime);
33             } catch (InterruptedException e) {
34                 e.printStackTrace();
35             } finally {
36                 latch.countDown();
37             }
38         }
39     }
40     
42 }
43                                 

 

参考:

      http://www.iteye.com/topic/1002652

      http://www.cnblogs.com/whgw/archive/2011/09/29/2195827.html

转载于:https://www.cnblogs.com/jsaint/articles/3374777.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值