ConCurrent包下工具类-CountDownLatch
来源:互联网 发布:淘宝专业模板宝贝装修 编辑:程序博客网 时间:2024/06/06 09:31
CountDownLatch是JAVA提供在java.util.concurrent包下的一个辅助类,可以把它看成是一个计数器,其内部维护着一个count计数,只不过对这个计数器的操作都是原子操作,同时只能有一个线程去操作这个计数器,CountDownLatch通过构造函数传入一个初始计数值,调用者可以通过调用CounDownLatch对象的cutDown()方法,来使计数减1;如果调用对象上的await()方法,那么调用者就会一直阻塞在这里,直到别人通过cutDown方法,将计数减到0,才可以继续执行。
常用于监听某些初始化操作,等待初始化完毕之后通知主线程继续工作.或者有一个线程需要等待其他线程完成之后才能执行
public class CountDownLatchTest { public static void main(String[] args) { /** * 1.创建一个CountDownLatch对象,设置需要等待线程的计数器 * 2.创建三个线程t1,t2,t3.t1线程需要等待t2,t3执行完成之后再继续执行 * 3.在t1线程执行时调用await()来等等待t2,t3执行完成 * 4.在t2,t3执行时调用countDown()通知t1线程开始执行,即计数器减一 * 5.当t2,t3都执行完成时t1开始执行 */ final CountDownLatch countDown = new CountDownLatch(2); Thread t1 = new Thread(new Runnable() { @Override public void run() { try { System.out.println("进入t1线程,等待其他线程处理完成"); countDown.await(); System.out.println("t1线程继续执行"); } catch (Exception e) { e.printStackTrace(); } } }); Thread t2 = new Thread(new Runnable() { @Override public void run() { try { System.out.println("t2线程进行初始化操作"); Thread.sleep(3000); System.out.println("t2线程初始化完毕,通知t1线程继续。。。"); countDown.countDown(); } catch (Exception e) { e.printStackTrace(); } } }); Thread t3 = new Thread(new Runnable() { @Override public void run() { try { System.out.println("t3线程进行初始化操作"); Thread.sleep(4000); System.out.println("t3线程初始化完毕,通知t1线程继续。。。"); countDown.countDown(); } catch (Exception e) { e.printStackTrace(); } } }); t1.start(); t2.start(); t3.start(); }}
执行结果如下
阅读全文
0 0
- ConCurrent包下工具类-CountDownLatch
- ConCurrent包下工具类-CyclicBarrier
- 理解concurrent包中的CountDownLatch
- JAVA concurrent包学习--CountDownLatch
- java.util.concurrent包(5)-CountDownLatch使用
- Java并发包concurrent之CountDownLatch
- concurrent CountDownLatch
- ubuntu 下工具收集
- linux 下工具
- window下工具简介
- linux下工具md5sum
- mac下工具汇总
- mac下工具记录
- Java.utils.concurrent包中的几个有用的类(CountDownLatch、CyclicBarrier、Semaphore)
- 同步辅助类 java.util.concurrent.CountDownLatch
- Java多线程之concurrent包(六)——CountDownLatch
- java.util.concurrent包详解:CyclicBarrier和CountDownLatch
- 试用concurrent包下的Executors,ExecutorService,CountDownLatch
- 【洛谷】P1628 合并序列
- 进程间的通讯之有名管道
- S7-200下载后总是出错的一个原因:
- git基本命令0.1
- Java MVC模式与三层架构比较
- ConCurrent包下工具类-CountDownLatch
- 在IDEA中实战Git
- python.matplotlib/datatime/CSV学习范例-读取CSV格式文件生成折线图
- css伪类选择器的使用
- uva 1619 单调 求一段序列和 和 其中最小值的乘积的最大值
- 第一篇博文
- 指数分布族常见类型
- MD5加密 java实现
- iOS开发之Xcode优化,清理Xcode编译缓存,清除provisioning profile 证书,添加provisioning profile证书