`
fanshaohua110
  • 浏览: 7189 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JAVA中CountDownLatch(闭锁)

阅读更多
CountDownLatch(闭锁): 顾明思议,一种计数器减少的闭锁。工作原理就想是红绿灯,当红灯亮的时候所有车辆都要等待,它们都在等待一个状态---绿灯。当绿灯时候所有车辆都可以通过。
CountDownLatch 最常见的用法:初始化一个整数的计数。它的countDown()方法用来对计数器做减法操作。当计数器为零时,所有等待的线程都可以通过。
下面我们来看下CountDownLatch都有那些方法:
await()当计数器不为零的时候等待
await(long timeout, TimeUnit unit)等待计数器不为零的时间。如果超过timeout则抛出InterruptedException.当在timeout时间内计数器为零了,则继续执行
countDown()计数器减去1
getCount()获取当前计数器值


package com.asiainfo.concurrent;

import java.util.concurrent.CountDownLatch;

/**
 * 关卡测试
 * 
 * @author fansh
 * 
 */
public class LatchTest {

	public static void main(String[] args) {

		final CountDownLatch run = new CountDownLatch(5);
		final CountDownLatch start = new CountDownLatch(1);
		for (int i = 0; i < 5; i++) {
			Thread t = new Thread() {
				@Override
				public void run() {
					try {
						start.await();
					} catch (InterruptedException e) {
						e.printStackTrace();
					} finally {
						System.out.println("线程"
								+ Thread.currentThread().getName()
								+ "将计数器减1.........");
						run.countDown();
					}
				}
			};
			t.start();
		}
		System.out.println("run 线程的计数器为" + run.getCount());
		start.countDown();
		try {
			run.await();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println("run 线程的计数器为" + run.getCount());
		System.out.println("等待五个线程运行完毕");
	}

}


分享到:
评论

相关推荐

    mybaits 多线程 实现数据批量插入 (运用CountDownLatch实现闭锁)

    mybaits 多线程 实现数据批量插入 (运用CountDownLatch实现闭锁) 1、mybatis批处理 2、数据分批量查询 3、数据分批量插入

    Java并发包之CountDownLatch用法.docx

    CountDownLatch计数器闭锁是一个能阻塞主线程,让其他线程满足特定条件下主线程再继续执行的线程同步工具。 Latch闭锁的意思,是一种同步的工具类。类似于一扇门:在闭锁到达结束状态之前,这扇门一直是关闭着的,不...

    Java并发编程应该掌握的并发工具类,快来看看你掌握了哪些?

    在我们JDK的并发包中,提供了几个非常有用的并发工具类,比如:CountDownLatch 闭锁、CyclicBarrier 同步屏障、Semaphore 信号量,在线程之间交换数据的一种方式 Exchanger,赶紧操练起来。 2、CountDownLatch 闭锁 ...

    java并发工具包 java.util.concurrent中文版用户指南pdf

    12. 闭锁 CountDownLatch 13. 栅栏 CyclicBarrier 14. 交换机 Exchanger 15. 信号量 Semaphore 16. 执行器服务 ExecutorService 17. 线程池执行者 ThreadPoolExecutor 18. 定时执行者服务 ScheduledExecutorService ...

    Java并发工具包java.util.concurrent用户指南中英文对照阅读版.pdf

    闭锁 CountDownLatch 13. 栅栏 CyclicBarrier 14. 交换机 Exchanger 15. 信号量 Semaphore 16. 执行器服务 ExecutorService 17. 线程池执行者 ThreadPoolExecutor 18. 定时执行者服务 ScheduledExecutorService 19....

    尚硅谷Java视频_JUC 视频教程

    尚硅谷_JUC线程高级_CountDownLatch 闭锁 ·6. 实现 Callable 接口 ·7. 尚硅谷_JUC线程高级_同步锁 Lock ·8. 尚硅谷_JUC线程高级_生产者消费者案例-虚假唤醒 ·9. 尚硅谷_JUC线程高级_Condition 线程通信 ·10. ...

    Java并发工具包java.util.concurrent用户指南中英文对照阅读版

    12. 闭锁 CountDownLatch 13. 栅栏 CyclicBarrier 14. 交换机 Exchanger 15. 信号量 Semaphore 16. 执行器服务 ExecutorService 17. 线程池执行者 ThreadPoolExecutor 18. 定时执行者服务 ScheduledExecutorService ...

    java并发工具包详解

    12. 闭锁 CountDownLatch 13. 栅栏 CyclicBarrier 14. 交换机 Exchanger 15. 信号量 Semaphore 16. 执行器服务 ExecutorService 17. 线程池执行者 ThreadPoolExecutor 18. 定时执行者服务 ScheduledExecutorService ...

    javaconcurrent源码-java7-source-code:Java7源码/Concurrency同步

    CountDownLatch 闭锁 AQS 锁的公共类 20180514 String, 部分Character 20180508 除 Set 外, 常用的 Collection 都已经分析完毕 简化语言描述, 增加测试用例(实践用法) 接触到新的类再看源码(不能脱离实际场景瞎看, ...

    J.U.C-AQS框架同步组件之闭锁CountDownLatch介绍

    CountDownLatch是在java1.5被引入的,跟它一起被引入的并发工具类还有CyclicBarrier、Semaphore、ConcurrentHashMap和BlockingQueue,它们都存在于java.util.concurrent包下。CountDownLatch这个类能够使一个线程...

    java并发包资源

    12. 闭锁 CountDownLatch 13. 栅栏 CyclicBarrier 14. 交换机 Exchanger 15. 信号量 Semaphore 16. 执行器服务 ExecutorService 17. 线程池执行者 ThreadPoolExecutor 18. 定时执行者服务 ScheduledExecutorService ...

    Java并发编程(学习笔记).xmind

    Java并发编程 背景介绍 并发历史 必要性 进程 资源分配的最小单位 线程 CPU调度的最小单位 线程的优势 ... Java并发程序中的串行,主要来自独占的资源锁 优化策略 缩

    java8源码-baijia123:常用工具类及测试类

    TestHarnes-&gt;在计时测试中使用CountDownLatch(闭锁)来启动和停止线程 Preloader-&gt;使用FutureTask来提前加载稍后需要的数据 BoundedHashSet-&gt;使用Semaphore为容器设置边界 CellularAutomata-&gt;通过CyclicBarrier...

    juconcurrent:java.util.concurrent

    原子变量-CAS算法3.ConcurrentHashMap锁分段机制4.CountDownLatch闭锁5.实现Callable接口6.Lock同步锁7.Condition控制线程通信8.线程按序交替9.ReadWriteLock读写锁10.线程八锁11.线程池12.线程调度13.ForkJoinPool ...

    Java并发编程实战

    14.6 java.util.concurrent同步器类中的 AQS257 14.6.1 ReentrantLock257 14.6.2 Semaphore与CountDownLatch258 14.6.3 FutureTask259 14.6.4 ReentrantReadWriteLock259 第15章 原子变量与非阻塞同步机制261 ...

    并发编程笔记20190526.docx

    二、闭锁CountDownLatch 28 1、应用场景 28 2、CyclicBarrier 28 3、Semaphore 29 4、Callable、Future和FutureTask 30 5、原子操作CAS (compare atomic swap) 32 三、显式锁和AQS 34 1、AQS定义两种资源共享方式: ...

Global site tag (gtag.js) - Google Analytics