JUC-工具类:1. CountDownLatch
功能概述
- 构造一个Latch(锁),指定需要执行多少次countDown()方法后,latch才打开。
1.1 构造时指定 递减式计数器的初始值,每次countDown的调用,计数减一,当计数为0,latch打开。
- 线程调用await()方法后,判断latch的状态
2.1 若latch未打开,则阻塞等待;
2.2 若latch已打开则继续执行。
方法介绍
- 构造方法 :
指定计数器的初始值,其值可以是1~N。
- countDown :
作用是让计数器的值减一,此方法的调用并不会阻塞调用线程,并不关心是哪个线程调用的(即相同线程内可多次调用,不同线程各自调用一次或多次都行)。
- await:
3.1 调用此方法时,如果计数器中的值不是0,会阻塞调用线程,直到计数器的值减到0;如果调用时计数器的值是0,则不阻塞调用线程。
3.2 调用await等待放行的线程可以是0~n个,当计数器的计数减为0时,所有之前被阻塞的线程都被激活,继续执行。
3.3 被interrup时,会抛出异常
打破 await 阻塞状态
- 计数减到0
- 被别的线程 interrupt ,根据情况判断
- 指定超时参数
场景案例
- 一声令下,全员起跑
计数器的初始值为1,多个线程进入await,一个裁判调用一次countDown,多个线程开始跑(继续运行)
- 妈妈等所有宝宝都睡着了,才回自己房间休息
计数器的初始值为宝宝个数,妈妈调用await,每个宝宝睡的时候,调用一次countDown,等所有宝宝都睡着了(调用了countDown),妈妈的await阻塞状态结束,妈妈回去睡觉。
本文标题:JUC-工具类:1. CountDownLatch
本文链接:https://www.haomeiwen.com/subject/xpavektx.html
网友评论