美文网首页
JUC-工具类:1. CountDownLatch

JUC-工具类:1. CountDownLatch

作者: rock_fish | 来源:发表于2021-06-15 11:59 被阅读0次

功能概述

  1. 构造一个Latch(锁),指定需要执行多少次countDown()方法后,latch才打开。
    1.1 构造时指定 递减式计数器的初始值,每次countDown的调用,计数减一,当计数为0,latch打开。
  2. 线程调用await()方法后,判断latch的状态
    2.1 若latch未打开,则阻塞等待;
    2.2 若latch已打开则继续执行。

方法介绍

  1. 构造方法 :
    指定计数器的初始值,其值可以是1~N。
  2. countDown :
    作用是让计数器的值减一,此方法的调用并不会阻塞调用线程,并不关心是哪个线程调用的(即相同线程内可多次调用,不同线程各自调用一次或多次都行)。
  3. await:
    3.1 调用此方法时,如果计数器中的值不是0,会阻塞调用线程,直到计数器的值减到0;如果调用时计数器的值是0,则不阻塞调用线程。
    3.2 调用await等待放行的线程可以是0~n个,当计数器的计数减为0时,所有之前被阻塞的线程都被激活,继续执行。
    3.3 被interrup时,会抛出异常

打破 await 阻塞状态

  1. 计数减到0
  2. 被别的线程 interrupt ,根据情况判断
  3. 指定超时参数

场景案例

  1. 一声令下,全员起跑
    计数器的初始值为1,多个线程进入await,一个裁判调用一次countDown,多个线程开始跑(继续运行)
  2. 妈妈等所有宝宝都睡着了,才回自己房间休息
    计数器的初始值为宝宝个数,妈妈调用await,每个宝宝睡的时候,调用一次countDown,等所有宝宝都睡着了(调用了countDown),妈妈的await阻塞状态结束,妈妈回去睡觉。

相关文章

网友评论

      本文标题:JUC-工具类:1. CountDownLatch

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