美文网首页Java
CountDownLatch相关

CountDownLatch相关

作者: 今晚打老虎_d166 | 来源:发表于2020-05-03 16:24 被阅读0次

1: 为什么需要countDownLatch

1.1 CountDownLatch同步计数器,当计数器数值减为0时,所有受其影响而等待的线程将会被激活,这样保证模拟并发请求的真实性。
1.2 面试的时候会被问到

2: 概念

CountDownLatch位于package java.util.concurrent 包下,是一个用来协调线程同步的通信类,CountDownLatch内部通过一个计数器,能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行计数器初始值为线程的数量。当每一个线程完成自己任务后,计数器的值就会减一。当计数器的值为0时,表示所有的线程都已经完成一些任务,然后在CountDownLatch上等待的线程就可以恢复执行接下来的任务。

3:源代码

//  每次将count减1
public void countDown() { sync.releaseShared(1);}
// 让调用该方法的线程挂起,直到count被减到0
public void await()throws InterruptedException {
sync.acquireSharedInterruptibly(1);
}

4:示例

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class CountDownLatchTest {

    public static void main(String[] args) {
        final CountDownLatch latch = new CountDownLatch(3);
        System.out.println("主线程开始执行…… ……");
        //第一个子线程执行
        ExecutorService pool = Executors.newFixedThreadPool(3);
        for(int i=0;i<3;i++){
            Runnable runnable = new Runnable() {
                public void run() {
                    try{
                        System.out.println("线程名称:"+Thread.currentThread().getName()+"执行开始");
                        Thread.sleep(1000);
                        System.out.println("线程名称:"+Thread.currentThread().getName()+"执行结束");
                        latch.countDown(); // 每个线程执行减1
                    } catch (Exception e){
                        e.printStackTrace();
                    }
                }
            };
            pool.execute(runnable); // 线程执行
        }

        try {
            latch.await();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("子线程都执行完成,继续执行主线程");
    }
}

输出:

主线程开始执行…… ……
线程名称pool-1-thread-1执行开始
线程名称pool-1-thread-3执行开始
线程名称pool-1-thread-2执行开始
线程名称pool-1-thread-3执行结束
线程名称pool-1-thread-1执行结束
线程名称pool-1-thread-2执行结束
子线程都执行完成,继续执行主线程

相关文章

网友评论

    本文标题:CountDownLatch相关

    本文链接:https://www.haomeiwen.com/subject/yvodghtx.html