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()挂起进入屏障状态后所有线程变成可执行状态.
相关推荐
CountDownLatch 的核心概念是“计数器”,这个计数器必须由调用 `countDown()` 方法的线程递减,当计数器的值变为零时,所有等待在 `await()` 方法上的线程都将被释放。 **用法:** 1. **初始化:** 使用给定的计数...
在实际使用中,根据具体需求选择合适的方法,如CountDownLatch适用于一个线程等待多个线程的场景,CyclicBarrier适合多个线程协作执行多阶段任务,而Semaphore则可以用于限制资源的并发访问。 在深入理解这些工具的...
- **并发工具类**:CountDownLatch、CyclicBarrier等并发工具类的使用方法。 以上内容是根据《Java 基础入门(传智播客)》可能包含的核心知识点进行的总结与扩展。对于初学者而言,掌握这些基本概念和技术将为后续...
在准备Java面试时,了解基础概念和技术细节至...总的来说,Java面试基础涵盖了广泛的领域,从语言基础到高级特性,再到工具使用和实战经验,都需要扎实的掌握。通过不断学习和实践,才能在面试中展现出自己的专业素养。
1. 线程同步问题:使用 synchronized 关键字,在需要同步的方法的方法签名中加入 synchronized 关键字;使用 synchronized 块对需要进行同步的代码段进行同步;使用 JDK 5 中提供的 java.util.concurrent.lock 包中...
AQS是一个抽象类,提供了线程同步的基础框架,它使用一个整型状态变量(在这里是count)来管理计数。CountDownLatch的计数器在构造时初始化,并且只能递减,当计数器变为0时,所有等待的线程会被释放。`...
CountDownLatch的设计基于AbstractQueuedSynchronizer(AQS),这是一个用于构建锁和同步组件的基础框架。 CountDownLatch的构造函数接收一个整数参数`count`,这个参数代表了计数器的初始值。当并发执行的线程调用...
2. **泛型**:泛型提供了一种在编译时检查类型安全的方法,允许在类、接口和方法中使用类型参数,减少强制类型转换。 3. **枚举**:枚举是Java中的一种特殊类,用于定义一组固定的常量,提高了代码的可读性和安全性...
### CountDownLatch 在 Java 并发编程中的应用 在并发编程领域,`CountDownLatch` 是一个非常实用的工具类,它属于 Java 并...掌握了 `CountDownLatch` 的使用方法后,开发者能够更好地设计出健壮、高效的并发程序。
在使用CountDownLatch时,需要了解它的两个重要方法:countDown()和await()。countDown()方法是倒数一次,await()方法是等待倒数到0,如果没有到达0,就只有阻塞等待了。 下面是一个使用CountDownLatch的示例代码:...
理解线程同步、锁机制、并发工具类(如Semaphore、CountDownLatch)对于构建高效的多线程应用至关重要。 12. **反射机制**:Java反射API允许在运行时检查类、接口、字段和方法的信息,甚至可以动态调用方法和改变...
学会使用InputStream、OutputStream、Reader、Writer等基础流,以及BufferedReader、FileWriter等缓冲流,是进行数据交换的关键。 7. **多线程**:Java内置对多线程的支持,通过Thread类或Runnable接口可以创建并...
- **缓冲区与管道**:讲解BufferedReader、BufferedWriter等缓冲流的使用方法,以及如何利用管道进行进程间通信。 - **序列化**:介绍对象序列化的原理及其在实践中的应用案例。 ### 7. 泛型与集合框架 - **泛型...
4. **多线程**:线程的创建(Thread类、Runnable接口)、同步机制(synchronized关键字,wait/notify,Lock接口),以及并发工具类(如Semaphore、CountDownLatch、CyclicBarrier)的使用。 5. **网络编程**:TCP/...
- **泛型**:理解泛型的概念,使用泛型类、泛型方法和通配符。 - **枚举**:了解枚举类型及其在Java中的应用。 - **IO流**:学习字节流、字符流、对象流,以及缓冲区流和转换流的使用。 - **多线程**:理解线程...
6. **线程通信**:wait()、notify()和notifyAll()方法的使用,以及生产者消费者模型。 7. **线程状态**:理解NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING和TERMINATED六种线程状态。 8. **JVM内存模型**:了解...
理解线程同步(如`synchronized`关键字,`wait()`, `notify()`方法,`Lock`接口)以及并发工具类(如`ExecutorService`, `CountDownLatch`, `CyclicBarrier`)对优化程序性能至关重要。 3. **集合框架**:Java的...
- **数组操作**:理解一维数组、多维数组的创建与使用方法。 #### 4. 面向对象编程 - **类与对象**:理解类的定义、对象的创建及其生命周期管理。 - **继承与多态**:学习继承的概念及其实现方式;理解接口与抽象类...
理解泛型的基本用法和限制,以及如何在集合、方法和类中使用泛型,能提高代码的可读性和安全性。 最后,`JAVA编程基础.ppt`这个文件名提示我们,这个教程可能以PowerPoint的形式呈现,包含幻灯片,通常会用图形、...
7. **并发编程改进**:Java提供了并发工具类如ConcurrentHashMap、CountDownLatch、CyclicBarrier等,以及Fork/Join框架和CompletableFuture,简化了多线程编程。 8. **反射API**:反射API允许程序在运行时动态地...