`
fanshaohua110
  • 浏览: 7375 次
  • 性别: 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实现闭锁)

    本文将详细介绍如何利用MyBatis结合多线程和CountDownLatch闭锁来实现数据的批量插入。 首先,我们来看`mybatis批处理`。MyBatis的批处理功能允许我们在一次数据库连接中执行多条SQL语句,从而减少了数据库连接的...

    实例讲解Java并发编程之闭锁

    Java并发编程中的闭锁是一种同步工具类,它用于协调多个线程之间的操作顺序,确保一组操作在所有线程完成之前不会继续。闭锁的核心概念是一个内部计数器,初始值为一个正整数,表示需要等待的事件数量。当这个计数器...

    并发编程之CountDownLatch

    CountDownLatch 是一个同步的辅助类,它可以允许一个或多个线程等待,直到一组在其它线程中的操作执行完成。它通过一个计数器来实现的,计数器的初始值为线程的数量。每当一个线程完成了自己的任务后,计数器的值就...

    Java并发系列之CountDownLatch源码分析

    Java并发系列之CountDownLatch源码分析 CountDownLatch是一种非常有用的工具类,用于拦截一个或多个线程,使其在某个条件成熟后再执行。它的内部提供了一个计数器,在构造闭锁时必须指定计数器的初始值,且计数器的...

    Java并发编程之闭锁与栅栏的实现

    在Java并发编程中,闭锁和栅栏是两种重要的同步工具,它们可以帮助开发者在多线程环境下控制线程的执行顺序和同步。本篇文章将详细解释这两种机制,并通过实例代码进行演示。 一、闭锁(CountDownLatch) 闭锁,由...

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

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

    深入学习Java同步机制中的底层实现

    `CountDownLatch`则是一种闭锁,常用于多线程间的协调,它允许一个或多个线程等待其他线程完成操作。`CountDownLatch`的`Sync`子类同样基于AQS,通过`tryAcquireShared`和`tryReleaseShared`来实现计数器的递减与...

    CountDownLatch、Semaphore等4大并发工具类详解

    本文将详细介绍 Java 并发工具类的四大类:CountDownLatch、Semaphore、CyclicBarrier 和 Phaser,及其应用场景和使用方法。 CountDownLatch CountDownLatch 是一个同步的辅助类,允许一个或多个线程,等待其他一...

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

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

    JAVA中锁的解决方案.docx

    JAVA 中锁的解决方案 在 JAVA 中,锁是非常重要的概念,它可以帮助开发者解决多线程编程中出现的同步问题。在本文中,我们将深入介绍 JAVA 中锁的解决方案,包括乐观锁和悲观锁的定义、核心代码剖析以及使用场景。 ...

    尚硅谷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 ...

    Java并发编程之栅栏(CyclicBarrier)实例介绍

    Java并发编程中的栅栏(CyclicBarrier)是一个同步辅助类,它允许一组线程等待彼此到达某个特定点,然后一起继续执行。这个特定点被称为屏障点。与闭锁(CountDownLatch)不同,闭锁通常是一次性的,而CyclicBarrier...

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

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

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

    CountDownLatch是Java并发编程中的一个重要工具,它属于Java并发包`java.util.concurrent`下的一个类。这个类的主要功能是让一个或多个线程等待其他线程完成特定的任务,然后才能继续执行。CountDownLatch的设计基于...

    java并发包资源

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

    深入浅出_Java并发工具包原理讲解

    3. 各种并发工具类:包括闭锁(CountDownLatch)、栅栏(CyclicBarrier)、信号量(Semaphore)、读写锁(ReentrantReadWriteLock)等,这些工具类提供了丰富的线程间协调和控制的机制,使得多线程之间的合作更加...

Global site tag (gtag.js) - Google Analytics