首页 > 其他 > 详细

闭锁CountDownLatch的源码实现介绍

时间:2014-03-06 02:02:27      阅读:245      评论:0      收藏:0      [点我收藏+]

    首先,我们先来了解下闭锁的知识。闭锁是一种同步工具类,可以延迟线程的进度直到其到达终止状态。闭锁的作用就相当于一扇门,在闭锁到达结束状态之前,这门一直是关闭的,并且没有任何线程可以通过,当到达结束状态时,这门打开并允许所有的线程通过,当闭锁到达结束状态之后,将不会改变闭锁的状态,一直保持着打开的状态,闭锁可以确保某些活动指导其他活动都完成后才继续执行。下面看一个具体的实现。

bubuko.com,布布扣
package com.nine.concurrent;

import java.util.concurrent.CountDownLatch;

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

这个demo中,使用了闭锁,而不是在线程创建后就立即启动,启动门,startGate使得主线程能够同时释放所有的工作线程,而结束门,可以使主线程能够能带最后一个线程执行完成,而不是顺序的等待每个线程执行完成。

下面来介绍下闭锁的具体实现:

所含方法: await(),await(long, TimeUnit),countDown,getCount
内部静态类Sync extends AbstractQueuedSynchronizer
1、两个公开方法,await和countDown,不存在获取资源的操作,在初始化的时候已经设置state。tryAcquireShared只是做检查操作,如果等于0,就返回1
countDown做releaseShared操作,它的实现是基于AQS的实现机制。下次重点解读下AQS的原理

闭锁CountDownLatch的源码实现介绍,布布扣,bubuko.com

闭锁CountDownLatch的源码实现介绍

原文:http://www.cnblogs.com/zhenglu204/p/3583431.html

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