码迷,mamicode.com
首页 > 其他好文 > 详细

CountDownLatch同步工具类的使用

时间:2019-12-11 11:18:47      阅读:67      评论:0      收藏:0      [点我收藏+]

标签:system   inf   valueof   article   img   csdn   效率   color   eof   

同步工具类的使用大大方便了多线程并发的操作。CountDownLatch 是一个 java.util.concurrent下的同步工具类,它允许一个或多个线程一直等待,直到其他线程执行完后再执行。这种需求如果使用基本的线程通信来操作的确过于繁琐。使用CountDownLatch工具类大大提高了这类问题情形的工作效率。

例如有10个线程,要求主线程必须在其他9个线程全部执行完后才执行,不进行任何操作,执行结果肯定是杂乱无序的:

 1 import java.util.concurrent.CountDownLatch;
 2 
 3 public class CountDownLatchDemo {
 4     public static void main(String[] args) {
 5       for (int i=0;i<9;i++) {
 6           new Thread(()->{
 7               System.out.println(Thread.currentThread().getName()+"运行!");
 8               },"线程"+String.valueOf(i)).start();
 9       }
10         System.out.println("main线程结束!!!");
11     }
12 }

技术图片

 

使用CountDownLatch工具类,及使用方法:

 1 import java.util.concurrent.CountDownLatch;
 2 
 3 public class CountDownLatchDemo {
 4     public static void main(String[] args) throws InterruptedException {
 5         CountDownLatch countDownLatch=new CountDownLatch(9);
 6       for (int i=0;i<9;i++) {
 7           new Thread(()->{
 8               System.out.println(Thread.currentThread().getName()+"运行!");
 9               countDownLatch.countDown();
10               },"线程"+String.valueOf(i)).start();
11       }
12       countDownLatch.await();
13         System.out.println("main线程结束!!!");
14     }
15 }

技术图片

 

 

原理:

* CountDownLatch主要有两个方法,当一个或多个线程调用await方法时,这些线程会阻塞

* 其它线程调用countDown方法会将计数器减1(调用countDown方法的线程不会阻塞)

* 当计数器的值变为0时,因await方法阻塞的线程会被唤醒,继续执行

 

了解更多:

https://www.cnblogs.com/nullzx/p/5272807.html

 

 

ps:自定义模板代码,将代码块抽取成快捷键的方法:

https://blog.csdn.net/zhou520yue520/article/details/82713820

 

 

CountDownLatch同步工具类的使用

标签:system   inf   valueof   article   img   csdn   效率   color   eof   

原文地址:https://www.cnblogs.com/fangtingfei/p/12021145.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!