`

并发控制类CountDownLatch

阅读更多

 

CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行;

CountDownLatch是在java1.5被引入的,存在于java.util.concurrent包下。CountDownLatch这个类能够使一个线程等待其他线程完成各自的工作后再执行。例如,应用程序的主线程希望在负责启动框架服务的线程已经启动所有的框架服务之后再执行。

CountDownLatch是通过一个计数器来实现的,计数器的初始值为线程的数量。每当一个线程完成了自己的任务后,计数器的值就会减1。当计数器值到达0时,它表示所有的线程已经完成了任务,然后在闭锁上等待的线程就可以恢复执行任务;

CountDownLatch类有3个基本元素:

  1. 初始值决定CountDownLatch类需要等待的事件的数量。
  2. await() 方法, 被等待全部事件终结的线程调用。
  3. countDown() 方法,事件在结束执行后调用。

当创建 CountDownLatch 对象时,对象使用构造函数的参数来初始化内部计数器。每次调用 countDown() 方法, CountDownLatch 对象内部计数器减一。当内部计数器达到0时, CountDownLatch 对象唤醒全部使用 await() 方法睡眠的线程们。

不可能重新初始化或者修改CountDownLatch对象的内部计数器的值。一旦计数器的值初始后,唯一可以修改它的方法就是之前用的 countDown() 方法。当计数器到达0时, 全部调用 await() 方法会立刻返回,接下来任何countDown() 方法的调用都将不会造成任何影响。

例子:

   

    public static void main(String[] args) {
        ExecutorService executor = Executors.newFixedThreadPool(10);
        final CounterDemo1 counterDemo = new CounterDemo1();
        int callTime = 100000;
        final String url = "http://localhost:8080/hello";
        CountDownLatch countDownLatch = new CountDownLatch(callTime);
        //模拟并发情况下的接口调用统计
        for(int i=0;i<callTime;i++){
            executor.execute(new Runnable() {
                @Override
                public void run() {
                    counterDemo.increase(url);
                    countDownLatch.countDown();
                }
            });
        }
        try {
            countDownLatch.await();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        executor.shutdown();
        //等待所有线程统计完成后输出调用次数
        System.out.println("调用次数:"+counterDemo.getCount(url));

 

分享到:
评论

相关推荐

    java并发编程中CountDownLatch和CyclicBarrier的使用借鉴.pdf

    java并发编程中CountDownLatch和CyclicBarrier是两个非常重要的线程控制和调度工具,经常被用于解决多线程程序设计中的线程等待问题。本文将对CountDownLatch和CyclicBarrier的使用场景和实现进行详细的介绍。 ...

    java并发工具类(CountDownLatch+Semaphore+Exchanger)

    在实际应用中,这三个工具类可以灵活组合使用,以满足复杂的并发控制需求。例如,CountDownLatch可以用于确保所有参与者准备好后再开始一个活动,Semaphore可以限制并发访问特定资源的线程数量,而Exchanger则可以在...

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

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

    浅谈java并发之计数器CountDownLatch

    CountDownLatch是Java并发编程中一个重要的工具类,用于协调多个线程间的同步。它通过一个计数器来控制线程的执行流程,使得一个或多个线程等待...正确理解和使用CountDownLatch能够提高程序的效率和并发控制的精确性。

    Java并发系列之CountDownLatch源码分析

    Java并发系列之CountDownLatch源码分析 CountDownLatch是一种非常有用的工具类,用于拦截一个或多个线程,...CountDownLatch是一个非常有用的工具类,能够帮助我们更好地控制线程的执行顺序,提高程序的效率和可读性。

    利用 CountDownLatch 类实现线程同步

    在实际开发中,结合 `ExecutorService` 和 `Future`,我们可以构建更复杂的并发控制策略,以优化多线程程序的性能和可维护性。然而,也要注意,过度使用或不恰当使用同步工具可能导致死锁或性能下降,因此在设计并发...

    并发编程——并发工具类.pdf

    并发工具类则是Java中用于支持多线程协作和同步控制的一系列工具,它们可以简化并发控制逻辑,提高开发效率,并且减少因并发编程带来的错误。 #### 标题与描述解析 标题“并发编程——并发工具类.pdf”预示了文档...

    Java并发编程:CountDownLatch与CyclicBarrier和Semaphore的实例详解

    Semaphore类位于java.util.concurrent包下,用于实现共享资源的并发访问控制。Semaphore类提供了以下构造器: public Semaphore(int permits);//参数permits表示可用的许可数 Semaphore类中最重要的三个方法是: ...

    并发编程之Tools&CountDownLatch&Semaphore原理与应用1

    总结,Semaphore和CountDownLatch都是并发编程中重要的同步工具。Semaphore用于限制并发访问的线程数量,适用于资源有限的情况,如服务器限流、数据库连接池等。而CountDownLatch则用于线程间的协调,让一个线程等待...

    java线程并发countdownlatch类使用示例

    Java中的`CountDownLatch`是线程并发控制的一个重要工具,它允许一组线程等待其他线程完成执行。在多线程编程中,我们经常遇到这样的场景:主线程需要等待若干子线程完成各自的任务后再继续执行。`CountDownLatch`...

    多线程countDownLatch方法介绍

    在Java多线程编程中,CountDownLatch是一个非常重要的同步工具类,它可以帮助我们协调多个线程之间的交互。本文将深入探讨CountDownLatch的工作原理、使用场景以及相关源码分析。 CountDownLatch是一个计数器,初始...

    CountDownLatch练习

    CountDownLatch是Java并发编程中一个重要的同步工具类,它允许一个或多个线程等待其他线程完成操作。这个工具在多线程环境下的并行处理和协调中扮演着关键角色。 **CountDownLatch是什么?** CountDownLatch是一个...

    Java并发工具类示例

    Java并发编程是开发高效多线程应用的关键,它提供了丰富的工具类来协助开发者管理线程间的协作和同步。本文将详细解析Java并发工具类,并通过示例...在实际项目中,应根据需求选择合适的工具类,确保并发控制的有效性。

    java高并发程序设计(原版电子书)

    3. **并发控制**:讲解Java中的同步机制,如`synchronized`关键字、`volatile`变量、`java.util.concurrent`包中的`Lock`接口及其实现(如`ReentrantLock`),以及原子变量类(`AtomicInteger`, `AtomicLong`等)。...

    java并发集合

    Java提供了一系列的并发集合类,使得在并发环境中实现高效且线程安全的数据处理成为可能。这些集合主要存在于`java.util.concurrent`包中,设计目标是提高并发性能并减少同步开销。 首先,我们要了解Java并发集合的...

    java并发编程实战源码,java并发编程实战pdf,Java

    3. **并发控制**:Java提供了多种并发控制工具,包括synchronized、wait()、notify()、notifyAll()、ReentrantLock(可重入锁)、Semaphore(信号量)和CountDownLatch(倒计时器)等。这些工具用于协调不同线程的...

    Java中的并发工具类.docx

    Java并发工具类是Java多线程编程中非常重要的部分,它们提供了一种高效且安全的方式来管理并发任务。本文主要讨论两个关键的并发...在实际开发中,根据具体需求选择合适的工具类,可以有效地管理和控制并发执行的任务。

    笔记-2、线程的并发工具类2

    在Java的多线程编程中,为了有效地管理和协调并发执行的线程,Java提供了一系列的并发工具类。这些工具类极大地简化了并发编程中的同步和通信问题,使得开发者能够更安全、高效地编写多线程程序。以下是针对给定标题...

    Java多线程之并发工具类

    本文将详细介绍三个重要的并发工具类:CountDownLatch、CyclicBarrier和Semaphore。 首先,CountDownLatch是一个同步倒数计数器,主要用于让一个或多个线程等待其他线程完成特定操作。其构造函数接受一个整数参数,...

Global site tag (gtag.js) - Google Analytics