`
阅读更多

 

   java.util.concurrent.CountDownLatch 

   一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。

 用给定的计数 初始化 CountDownLatch。由于调用了 countDown() 方法,所以在当前计数到达零之前,  await 方法会一直受阻塞。到达0之后,会释放所有等待的线程,执行await 后续操作。

 

   最常见的使用场景: 等待其他线程处理完才继续当前线程。

 

最重要的是使用非常简单!    

 

   使用方法3步走:

 

/**
 * step.1
 * 创建CountDownLatch 实例  预定计数次数:2
 */
CountDownLatch latch = new CountDownLatch(2);

/**
 * step.2
 * 递减锁存器的计数,如果计数到达零,则释放所有等待的线程。 
 * 如果当前计数大于零,则将计数减少 1
 */
latch.countDown();

/**
 * step.3
 * 使当前线程在锁存器倒计数至零之前一直等待,除非线程被中断
 * 如果当前的计数为零,则此方法立即返回
 */
latch.await();

 

 

   示例

final int count = 10; // 计数次数
final CountDownLatch latch = new CountDownLatch(count);
for (int i = 0; i < count; i++) {
	new Thread(new Runnable() {
		@Override
		public void run() {
			try {
				// do anything
				System.out.println("线程"
						+ Thread.currentThread().getId());
			} catch (Throwable e) {
				// whatever
			} finally {
				// 很关键, 无论上面程序是否异常必须执行countDown,否则await无法释放
				latch.countDown();
			}
		}
	}).start();
}
try {
	// 10个线程countDown()都执行之后才会释放当前线程,程序才能继续往后执行
	latch.await();
} catch (InterruptedException e) {
	// whatever
}
System.out.println("Finish");

 

   java.util.concurrent.CyclicBarrier 循环屏障(可重用)

  一组线程内部全部调用await()挂起进入屏障状态后所有线程变成可执行状态.

  

 

 

0
0
分享到:
评论

相关推荐

    CountDownLatch 和 CyclicBarrier 的运用(含AQS详解)

    CountDownLatch 的核心概念是“计数器”,这个计数器必须由调用 `countDown()` 方法的线程递减,当计数器的值变为零时,所有等待在 `await()` 方法上的线程都将被释放。 **用法:** 1. **初始化:** 使用给定的计数...

    Java并发编程一CountDownLatch、CyclicBarrier、Semaphore初使用

    在实际使用中,根据具体需求选择合适的方法,如CountDownLatch适用于一个线程等待多个线程的场景,CyclicBarrier适合多个线程协作执行多阶段任务,而Semaphore则可以用于限制资源的并发访问。 在深入理解这些工具的...

    《Java 基础入门(传智播客)》_高清中文版pdf 网盘链接

    - **并发工具类**:CountDownLatch、CyclicBarrier等并发工具类的使用方法。 以上内容是根据《Java 基础入门(传智播客)》可能包含的核心知识点进行的总结与扩展。对于初学者而言,掌握这些基本概念和技术将为后续...

    java面试基础

    在准备Java面试时,了解基础概念和技术细节至...总的来说,Java面试基础涵盖了广泛的领域,从语言基础到高级特性,再到工具使用和实战经验,都需要扎实的掌握。通过不断学习和实践,才能在面试中展现出自己的专业素养。

    java基础面试考察点.pdf

    1. 线程同步问题:使用 synchronized 关键字,在需要同步的方法的方法签名中加入 synchronized 关键字;使用 synchronized 块对需要进行同步的代码段进行同步;使用 JDK 5 中提供的 java.util.concurrent.lock 包中...

    详解java CountDownLatch和CyclicBarrier在内部实现和场景上的区别

    AQS是一个抽象类,提供了线程同步的基础框架,它使用一个整型状态变量(在这里是count)来管理计数。CountDownLatch的计数器在构造时初始化,并且只能递减,当计数器变为0时,所有等待的线程会被释放。`...

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

    CountDownLatch的设计基于AbstractQueuedSynchronizer(AQS),这是一个用于构建锁和同步组件的基础框架。 CountDownLatch的构造函数接收一个整数参数`count`,这个参数代表了计数器的初始值。当并发执行的线程调用...

    Java基础尚硅谷宋红康学习笔记

    2. **泛型**:泛型提供了一种在编译时检查类型安全的方法,允许在类、接口和方法中使用类型参数,减少强制类型转换。 3. **枚举**:枚举是Java中的一种特殊类,用于定义一组固定的常量,提高了代码的可读性和安全性...

    thread count

    ### CountDownLatch 在 Java 并发编程中的应用 在并发编程领域,`CountDownLatch` 是一个非常实用的工具类,它属于 Java 并...掌握了 `CountDownLatch` 的使用方法后,开发者能够更好地设计出健壮、高效的并发程序。

    java并发编程之同步器代码示例

    在使用CountDownLatch时,需要了解它的两个重要方法:countDown()和await()。countDown()方法是倒数一次,await()方法是等待倒数到0,如果没有到达0,就只有阻塞等待了。 下面是一个使用CountDownLatch的示例代码:...

    Java基础教程 课件

    理解线程同步、锁机制、并发工具类(如Semaphore、CountDownLatch)对于构建高效的多线程应用至关重要。 12. **反射机制**:Java反射API允许在运行时检查类、接口、字段和方法的信息,甚至可以动态调用方法和改变...

    java基础资料合集.rar

    学会使用InputStream、OutputStream、Reader、Writer等基础流,以及BufferedReader、FileWriter等缓冲流,是进行数据交换的关键。 7. **多线程**:Java内置对多线程的支持,通过Thread类或Runnable接口可以创建并...

    Java语言程序设计-基础篇(原书第8版).pdf

    - **缓冲区与管道**:讲解BufferedReader、BufferedWriter等缓冲流的使用方法,以及如何利用管道进行进程间通信。 - **序列化**:介绍对象序列化的原理及其在实践中的应用案例。 ### 7. 泛型与集合框架 - **泛型...

    java面试题 在原有的基础上增加

    4. **多线程**:线程的创建(Thread类、Runnable接口)、同步机制(synchronized关键字,wait/notify,Lock接口),以及并发工具类(如Semaphore、CountDownLatch、CyclicBarrier)的使用。 5. **网络编程**:TCP/...

    硅谷java基础每日复习eDiary

    - **泛型**:理解泛型的概念,使用泛型类、泛型方法和通配符。 - **枚举**:了解枚举类型及其在Java中的应用。 - **IO流**:学习字节流、字符流、对象流,以及缓冲区流和转换流的使用。 - **多线程**:理解线程...

    JAVA基础及8个并发面试问题共2页.pdf.zip

    6. **线程通信**:wait()、notify()和notifyAll()方法的使用,以及生产者消费者模型。 7. **线程状态**:理解NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING和TERMINATED六种线程状态。 8. **JVM内存模型**:了解...

    Java进阶基础.zip

    理解线程同步(如`synchronized`关键字,`wait()`, `notify()`方法,`Lock`接口)以及并发工具类(如`ExecutorService`, `CountDownLatch`, `CyclicBarrier`)对优化程序性能至关重要。 3. **集合框架**:Java的...

    由浅入深学Java—基础、进阶与必做260题高清版

    - **数组操作**:理解一维数组、多维数组的创建与使用方法。 #### 4. 面向对象编程 - **类与对象**:理解类的定义、对象的创建及其生命周期管理。 - **继承与多态**:学习继承的概念及其实现方式;理解接口与抽象类...

    最好JAVA编程基础教程

    理解泛型的基本用法和限制,以及如何在集合、方法和类中使用泛型,能提高代码的可读性和安全性。 最后,`JAVA编程基础.ppt`这个文件名提示我们,这个教程可能以PowerPoint的形式呈现,包含幻灯片,通常会用图形、...

    Java核心技术第9版,基础知识+高级特性

    7. **并发编程改进**:Java提供了并发工具类如ConcurrentHashMap、CountDownLatch、CyclicBarrier等,以及Fork/Join框架和CompletableFuture,简化了多线程编程。 8. **反射API**:反射API允许程序在运行时动态地...

Global site tag (gtag.js) - Google Analytics