CountDownLatch的实现与其底层AQS

  • Post author:
  • Post category:其他




1、

CountDownLunch介绍



1.1 背景:

  • countDownLatch是在java1.5被引入,跟它一起被引入的工具类还有CyclicBarrier、Semaphore、concurrentHashMap和BlockingQueue。
  • 存在于java.util.cucurrent包下。



1.2 概念

  • countDownLatch这个类使一个线程等待其他线程各自执行完毕后再执行。
  • 是通过一个计数器来实现的,计数器的初始值是线程的数量。每当一个线程执行完毕后,计数器的值就-1,当计数器的值为0时,表示所有线程都执行完毕,然后在闭锁上等待的线程就可以恢复工作了。



1.3 源码

  • countDownLatch类中只提供了一个构造器:
//参数count为计数值
public CountDownLatch(int count) {
     };  
  • 类中有三个方法是最重要的:
//调用await()方法的线程会被挂起,它会等待直到count值为0才继续执行
public void await() throws InterruptedException {
    };   
//和await()类似,只不过等待一定的时间后count值还没变为0的话就会继续执行
public boolean await(long timeout, TimeUnit unit) throws InterruptedException {
    };  
//将count值减1
public void countDown() {
    };  



1.4 示例


代码示例:

CountDownLatch countDownLatch=new CountDownLatch(2);
countDownLatch.countDown();
countDownLatch.await();


模拟并发示例:

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;

public class CountDownLatchSample {
   

    /**
     * 计数器,用来控制线程
     * 传入参数2,表示计数器计数为2
     */
    private final static CountDownLatch mCountDownLatch = new CountDownLatch(2);
    /**
     * 示例工作线程类
     */
    private static class WorkingThread extends Thread {
   
        private final String mThreadName;
        private final int mSleepTime;
        public



版权声明:本文为weixin_49574902原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。