CountDownLatch
来源:互联网 发布:数据库设置主键的语句 编辑:程序博客网 时间:2024/06/09 20:35
CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行。
CountDownLatch是通过一个计数器来实现的,计数器的初始值为线程的数量。每当一个线程完成了自己的任务后,计数器的值就会减1。当计数器值到达0时,它表示所有的线程已经完成了任务,然后在闭锁上等待的线程就可以恢复执行任务
CountDownLatch的一个非常典型的应用场景是:有一个任务想要往下执行,但必须要等到其他的任务执行完毕后才可以继续往下执行。假如我们这个想要继续往下执行的任务调用一个CountDownLatch对象的await()方法,其他的任务执行完自己的任务后调用同一个CountDownLatch对象上的countDown()方法,这个调用await()方法的任务将一直阻塞等待,直到这个CountDownLatch对象的计数值减到0为止。
/** * Copyright © 2017 公司名称. All rights reserved. * * @Title: CountDownLatchTest.java * @Prject: thread * @Package: com.sun.test.countDownLatch * @Description: TODO * @author: sunqz * @date: 2017年5月30日 下午9:07:40 * @version: V1.0 */package com.sun.test.countDownLatch;import java.util.concurrent.CountDownLatch;/** * @ClassName: CountDownLatchTest * @Description: countdownLatch测试 * @author: sunqz * @date: 2017年5月30日 下午9:07:40 */public class CountDownLatchTest {private static CountDownLatch countDownLatch= new CountDownLatch(1);public static void main(String[] args) {Thread work = new Thread(new WorkThread()); work.start();Thread init = new Thread(new InitThread());init.start();}/** * * @ClassName: InitThread * @Description: 模拟初始化线程 * @author: sunqz * @date: 2017年5月30日 下午9:11:38 */public static class InitThread implements Runnable{/* (non Javadoc) * @Title: run * @Description: TODO * @see java.lang.Runnable#run() */@Overridepublic void run() {// TODO Auto-generated method stubSystem.out.println("do init!");try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}countDownLatch.countDown();}}/** * * @ClassName: WorkThread * @Description: 模拟工作线程,工作之前必须先由初始化线程初始化完毕,工作线程才可以工作 * @author: sunqz * @date: 2017年5月30日 下午9:11:44 */public static class WorkThread implements Runnable{/* (non Javadoc) * @Title: run * @Description: TODO * @see java.lang.Runnable#run() */@Overridepublic void run() {// TODO Auto-generated method stubtry {countDownLatch.await(); //阻塞等待初始化线程初始化完毕才开始工作System.out.println("do work !");} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();} //}}}
运行上述程序,我们可以发现work线程会阻塞等待init线程工作完毕才执行。
运行结果:do init!
do work !
阅读全文
0 0
- CountDownLatch
- CountDownLatch
- CountDownLatch
- Countdownlatch
- CountDownLatch
- CountDownLatch
- CountDownLatch
- CountDownLatch
- CountDownLatch
- CountDownLatch
- CountDownLatch
- CountDownLatch
- CountDownLatch
- CountDownLatch
- CountDownLatch
- CountDownLatch
- CountDownLatch,
- CountDownLatch
- struct2 ajax
- Complex类的实现过程
- request.getContextPath()获取的是什么路径?
- Xpath总结
- 使用Sketch进行iOS开发
- CountDownLatch
- 微服务,微架构[十一]springboot模板页面thymeleaf
- java构造函数详解
- 读文献笔记:汇率政策新共识与“”中间制度消亡论“”
- Nested Segments CodeForces 652D 树状数组+离散化
- [OpenGL 超级宝典][笔记] 8.1 PBO介绍与用法
- 内省操作javabean
- Java中String对象创建机制详解
- 基于Scrapy分布式爬虫的开发与设计