`
eric_hwp
  • 浏览: 126572 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

线程同步工具之CountDownLatch

 
阅读更多

CountDownLatch的一个非常典型的应用场景是:有一个任务想要往下执行,但必须要等到其他的任务执行完毕后才可以继续往下执行。假如我们这个想要继续往下执行的任务调用一个CountDownLatch对象的await()方法,其他的任务执行完自己的任务后调用同一个CountDownLatch对象上的countDown()方法,这个调用await()方法的任务将一直阻塞等待,直到这个CountDownLatch对象的计数值减到0为止。

 

CountDownLatch类有3个基本元素:

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

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

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

此方法与其他同步方法有这些不同:

CountDownLatch 机制不是用来保护共享资源或者临界区。它是用来同步一个或者多个执行多个任务的线程。它只能使用一次。像之前解说的,一旦CountDownLatch的计数器到达0,任何对它的方法的调用都是无效的。如果你想再次同步,你必须创建新的对象。

CountDownLatch 类有另一种版本的 await() 方法,它是:

  • await(long time, TimeUnit unit): 此方法会休眠直到被中断; CountDownLatch 内部计数器到达0或者特定的时间过去了。TimeUnit 类包含了:DAYS, HOURS, MICROSECONDS, MILLISECONDS, MINUTES, NANOSECONDS, 和 SECONDS.

 

【转】http://blog.csdn.net/junshuaizhang/article/details/39580751

分享到:
评论

相关推荐

    利用 CountDownLatch 类实现线程同步

    总的来说,`CountDownLatch` 是一种有效的同步工具,尤其适用于那些需要等待一组线程全部完成后再执行后续操作的场景。在实际开发中,结合 `ExecutorService` 和 `Future`,我们可以构建更复杂的并发控制策略,以...

    Java线程并发工具类CountDownLatch原理及用法

    Barrier,中文可译为循环屏障或回环栅栏,它是一个多线程同步工具,用于让一组线程等待其他线程到达某个屏障点。在所有线程到达屏障点后,屏障点会释放,允许所有线程继续执行。CyclicBarrier的名字来源于它的可重用...

    多线程countDownLatch方法介绍

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

    Java多线程编程之CountDownLatch同步工具使用实例

    总的来说,Java的CountDownLatch是实现多线程同步的有效工具,它可以帮助开发者在复杂并发场景下控制线程的执行流程,确保程序的正确性和一致性。在实际开发中,根据需求选择合适的同步工具,如Semaphore(信号量)...

    一个简单的线程同步实例

    CountDownLatch是另一个有用的同步工具,它允许一个或多个线程等待其他线程完成操作。在CountDownLatch初始化时设置一个计数值,每次调用countDown()方法时,计数值减一,直到计数值为零时,所有等待的线程才会被...

    某电信项目多线程同步数据实例

    Java并发包(java.util.concurrent)中包含许多工具类,如Semaphore(信号量)、CountDownLatch(倒计时锁)、CyclicBarrier(回环栅栏)和Exchanger(交换器),它们是设计复杂多线程同步场景的重要工具。 在提供的...

    如何使用CountDownLatch同步java多线程

    在 Java 中,CountDownLatch 是一种常用的同步工具,它可以实现多个线程之间的同步操作,避免了线程之间的互相干扰。CountDownLatch 的工作原理是基于门栓机制的,只有当门栓的个数为 0 时,所有线程才能继续执行。...

    Java中多线程同步类 CountDownLatch

    Java中的CountDownLatch是一种多线程同步工具类,它在并发编程中扮演着重要角色,尤其在需要等待一组任务完成后再进行下一步操作的场景下。CountDownLatch的命名来源于其功能,"count down"意味着计数器向下递减,...

    java使用CountDownLatch等待多线程全部执行完成

    CountDownLatch 是 Java 中的一个同步工具类,允许一个或多个线程等待其他线程完成操作。它的应用场景非常广泛,例如在处理大量数据时,可以使用多线程的方式处理,然后在主线程等待所有子线程处理完成。 ...

    CountDownLatch同步工具类使用详解

    CountDownLatch是一个java.util.concurrent包下的同步工具类,它允许一个或多个线程等待直到在其他线程中一组操作执行完成。CountDownLatch的用法非常简单,它可以用来控制线程的执行顺序,使得某些线程能够等待其他...

    java 多线程同步

    包括线程安全集合(如ConcurrentHashMap、CopyOnWriteArrayList等)、线程池(ExecutorService、ThreadPoolExecutor、ScheduledThreadPoolExecutor等)、信号(CountDownLatch、CyclicBarrier、Semaphore等)以及...

    JAVA多线程CountDownLatch使用详解

    JAVA多线程CountDownLatch是JAVA多线程编程中的一种同步工具,主要用来让某个线程等待其他线程执行完毕后再继续执行。下面我们将详细介绍JAVA多线程CountDownLatch的使用和原理。 什么时候用CountDownLatch? 在多...

    Android 线程同步Demo

    然而,如果没有正确地管理线程,可能会引发数据竞争、死锁等问题,这正是线程同步所关注的重点。线程同步是为了确保多个线程在访问共享资源时能按照预定的顺序进行,避免出现不一致的状态,保证程序的正确性和稳定性...

    多线程的批量线程同步解决方案

    这篇博客文章可能探讨了在Java等语言中实现线程同步的各种策略和工具。 线程同步是为了避免多个线程在同一时刻访问共享资源,导致数据不一致或竞态条件。Java提供了多种同步机制,如synchronized关键字、锁(包括...

    JAVA100例之实例65 JAVA线程同步

    3. **java.util.concurrent 包**:这个包提供了许多高级的线程同步工具,如Semaphore(信号量)、CyclicBarrier(回环屏障)、CountDownLatch(倒计时器)等。这些工具可以更灵活地控制线程的并发执行。 4. **...

    Java中的CountDownLatch与CyclicBarrier:深入理解与应用实践

    在Java的并发编程中,CountDownLatch和CyclicBarrier是两个非常重要的同步工具,它们用于协调多个线程的执行顺序。...在实际开发中,我们应该根据具体的应用场景选择合适的同步工具,以实现高效的线程同步和协调。

    CountDownLatch和CyclicBarrier用法实例大全

    在Java并发编程中,CountDownLatch和CyclicBarrier是两种非常重要的同步工具类,它们用于协调多个线程间的协作。这两个工具都是在`java.util.concurrent`包下,是Java并发库的重要组成部分。 **CountDownLatch** ...

    Java中的线程安全与线程同步.doc

    除此之外,Java的并发工具类如Semaphore(信号量)、CyclicBarrier(循环屏障)和CountDownLatch(计数器门锁)等也是线程同步的重要工具,它们可以帮助开发者更好地控制线程的执行顺序和并发级别。 在实际编程中,...

    基于java开发的多线程下载工具(源码)

    此外,多线程同步也是该项目的一个重要技术点。在多线程环境中,为了保证数据一致性,防止资源竞争,开发者可能会使用`synchronized`关键字、`java.util.concurrent.locks`包中的锁机制,或者`java.util.concurrent`...

    多线程不同步演示2

    此外,`java.util.concurrent`包提供了如Semaphore(信号量)、CyclicBarrier(回环屏障)和CountDownLatch(计数器门)等工具,帮助实现更复杂的同步策略。 在"多线程不同步演示2"的源码中,我们可以分析其代码...

Global site tag (gtag.js) - Google Analytics