第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > 【Java 并发编程】CountDownLatch 简介

【Java 并发编程】CountDownLatch 简介

时间:2022-09-20 11:45:05

相关推荐

【Java 并发编程】CountDownLatch 简介

文章目录

I CountDownLatch 概念II CountDownLatch 使用流程III CountDownLatch API 简介

I CountDownLatch 概念

1. 概念 : CountDownLatch ( 倒计时锁 ) 是 Java 并发编程中重要的 线程同步辅助工具类 , 其与 join 方法功能类似 , 其可以阻塞住一个或多个线程 , 等待在某些线程中执行想用的操作 , 将 CountDownLatch 倒计时计数到 0 时 , 这些被阻塞的线程才能继续向下执行 ;

2. 作用 : CountDownLatch 可以将一个或多个线程阻塞 , 并在另外一个或多个线程中将 CountDownLatch 计数器减为 0 , 被阻塞的线程解除休眠状态 , 继续执行 ;

II CountDownLatch 使用流程

1. 初始化 CountDownLatch : 初始化new CountDownLatch ( 8 ), 在构造函数中 , 为其指定一个初始值 , 从这个值开始倒计时计数 ; 这里设置了 8 计数 , 可以等待另外 8 个线程执行完毕后 , 在执行后续操作 ;

2. 阻塞 : 在若干线程 ( 一个或多个 ) 中调用同一个CountDownLatch对象的await()方法 , 即可将这些线程阻塞 ;

3. 计数减一 : 在其它非阻塞的线程中 , 执行操作 , 之后调用CountDownLatch对象的countDown()方法 , 该计数器的计数会减一 , 如果计数减到 0 , 在线程中的阻塞就会解除 ;

4. 阻塞结束 : 当调用 countDown 计数减到 0 之后 , 线程阻塞解除 , 继续执行 await() 方法之后的代码 ;

III CountDownLatch API 简介

1. 构造方法 : 初始化 CountDownLatch 对象 , 传入计数器初始计数 count , 其可以表示阻塞 count 个线程 ;

① 函数原型 :

public CountDownLatch(int count)

② 参数int count: 初始计数 ;

2. 计数器递减方法 :每次调用该方法 , CountDownLatch 对象计数器就会减一 , 如果计数器计数减到 0 , 就会解除其对于线程的阻塞 ;

① 函数原型 :

public void countDown()

② 当前计数大于 0 : 计数 - 1 , 如果减一后的计数为 0 , 那么该 CountDownLatch 对象阻塞的线程就会从阻塞处开始执行 ;③ 桑倩计数等于 0 : 如果 CountDownLatch 对象的当前的计数是 0 , 那么不作任何操作 ;

3. 无参阻塞方法 :在线程 A 中调用该方法后 , 调用该方法的线程 , 线程 A 就会被阻塞住 ( 休眠 ) , 在 CountDownLatch 倒计时为 0 之后该阻塞解除 ;

① 函数原型 :

public void await() throws InterruptedException

② 计数为 0 : 如果当前的 CountDownLatch 计数为 0 , 那么阻塞无效 , 继续执行之后的代码 ;③ 计数大于 0 : 此时调用 await 方法 的线程阻塞 , 处于休眠状态 ;④ 线程非运行状态 : 如果调用 await 方法的线程处于中断状态 , 或者在等待时被中断 , 抛出 InterruptedException 异常 ;

4. 带参数的阻塞方法 :在线程 A 中调用该方法后 , 调用该方法的线程 , 线程 A 就会被阻塞住 ( 休眠 ) , 在 CountDownLatch 倒计时为 0 ( 计数 0 ) 或者超出了等待时间 ( 超时 ) 之后该阻塞解除 ;该方法运行机制与无参类似 , 这里重点说明超时等待机制 ;

① 函数原型 :

public void await(long timeout, TimeUnit unit) throws InterruptedException

② 参数long timeout: 阻塞操作要等待的最长时间 ;③ 参数TimeUnit unit: 等待时长的单位 , 一般是毫秒 ( ms ) ;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。