初步学习 CountDownLatch

CountDownLatch是一个灵活的闭锁的实现,他可以使一个或者多个线程等待一组事件发生。闭锁状态包括一个计数器,该计数器被初始化为一个正数,表示需要等待的事件数量。countDown方法递减计数器,表示有一个事件发生了。而await方法等到计数器达到0,表示所有需要等待的事件都已经发生。如果一个计数器值不为0,那么await会一直阻塞到计数器为零,或者等待中的线程中断,或者等待超时。

public class TestHarness {
    
    public long timeTasks(int nThreads,final Runnable task)throws Exception{
        
     final CountDownLatch  startGate=new CountDownLatch(1);
     final CountDownLatch  endGate=new CountDownLatch(nThreads);
     
     for (int i=0;i<nThreads;i++){
         Thread t=new Thread(){
             @Override
             public void run() {
                 startGate.await();
                 try {
                     task.run();
                 }catch (Exception e){
                     e.printStackTrace();
                 }finally 
                 {
                     endGate.countDown();
                 }
             }
         };
     }
     long start=System.nanoTime();
     startGate.countDown();
     endGate.await();
     long end=System.nanoTime();
     return end-start;
    }
}

上述代码,TestHarness 创建一定数量的线程,利用他们并发的执行任务,使用两个闭锁,分别表示“起始门(StartGate) 结束门(endgate)”,起始门初始值为1,结束门初始值为工作线程的数量,每个工作线程首先要做的值就是启动门上等待,从而保证所有线程都就绪后才开始执行。而每个线程要做的最后一件事就是将调用结束门的countdow方法减一。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值