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

CountDownLatch 线程助手

阅读更多
JAVA API (CountDownLatch)

class Driver { // ...
   void main() throws InterruptedException {
     CountDownLatch startSignal = new CountDownLatch(1);
     CountDownLatch doneSignal = new CountDownLatch(N);

     for (int i = 0; i < N; ++i) // create and start threads
       new Thread(new Worker(startSignal, doneSignal)).start();

     doSomethingElse();            // don't let run yet
     startSignal.countDown();      // let all threads proceed
     doSomethingElse();
     doneSignal.await();           // wait for all to finish
   }
 }

 class Worker implements Runnable {
   private final CountDownLatch startSignal;
   private final CountDownLatch doneSignal;
   Worker(CountDownLatch startSignal, CountDownLatch doneSignal) {
      this.startSignal = startSignal;
      this.doneSignal = doneSignal;
   }
   public void run() {
      try {
        startSignal.await();
        doWork();
        doneSignal.countDown();
} catch (InterruptedException ex) {} // return;
   }

   void doWork() { ... }
 }





class Driver2 { // ...
   void main() throws InterruptedException {
     CountDownLatch doneSignal = new CountDownLatch(N);
     Executor e = ...

     for (int i = 0; i < N; ++i) // create and start threads
       e.execute(new WorkerRunnable(doneSignal, i));

     doneSignal.await();           // wait for all to finish
   }
 }

 class WorkerRunnable implements Runnable {
   private final CountDownLatch doneSignal;
   private final int i;
   WorkerRunnable(CountDownLatch doneSignal, int i) {
      this.doneSignal = doneSignal;
      this.i = i;
   }
   public void run() {
      try {
        doWork(i);
        doneSignal.countDown();
      } catch (InterruptedException ex) {} // return;
   }

   void doWork() { ... }
 }



countDown方法是递减
await方法是等到计数器为零才启动线程





分享到:
评论

相关推荐

    多线程入门,分布式锁,等相关资料

    总结来说,本资源包提供的"多线程入门资料"涵盖了多线程的基本概念、实现方式、线程同步与通信、并发问题及其解决方案,以及分布式锁的原理与实现,是学习Java多线程和分布式系统的好助手。通过深入学习和实践,...

    java并发编程技术

    **并发包JUC(Java Util Concurrency)**:JUC是Java提供的高级并发工具包,包含如Semaphore(信号量)、CountDownLatch(计数器)、CyclicBarrier(回环栅栏)、Exchanger(交换器)等工具类,它们简化了多线程编程...

    aduna-commons-concurrent-2.2.jar.zip

    5. **实用工具类**:库中还包括了一些实用工具类,如CountDownLatch、CyclicBarrier、Semaphore等,它们在多线程协调和同步方面提供了强大的支持,可以帮助开发者构建复杂的并发场景。 在实际项目中,要充分利用...

    java面试题-应届生面试题-面试大全

    - **并发工具类**:熟悉ConcurrentHashMap、CountDownLatch、CyclicBarrier、Semaphore等并发工具的使用。 5. **IO流** - **流的分类**:了解字节流和字符流,理解节点流和处理流的区别。 - **文件操作**:熟悉...

    java中文API文档

    - `Semaphore`和`CountDownLatch`:用于线程同步和计数。 - `CyclicBarrier`和`Phaser`:协调多个线程之间的协作。 12. **I/O新特性** - NIO(非阻塞I/O):提供了选择器(Selector)和通道(Channel),允许单...

    [OOM] 记一次线上OOM的问题 - ado19861

    此外,`CountDownLatch`的使用也可能是问题的一部分,如果在多线程场景中,没有在finally块中正确调用`countDown()`方法,可能会导致线程等待时间过长,造成内存锁死,尤其是在3秒的超时设定下,如果未正确释放,...

    JDK_API_zh_CN.zip java 中文 API

    `Runnable`接口和`Thread`类可以创建并运行线程,而并发包中的工具类如`ExecutorService`、`Semaphore`、`CountDownLatch`等则有助于管理和控制线程。 5. **I/O流**:`java.io`包是Java输入/输出系统的基础,包括了...

    COREJAVA笔记

    这份"COREJAVA笔记"是全面学习和复习Java核心技术的好助手,它可以帮助读者深入理解Java语言的各个方面,提升编程技能,为实际项目开发打下坚实基础。无论你是刚接触Java的新手,还是寻求进一步提升的开发者,这份...

    JDK_API_1_6_zh_CN.zip

    还包括synchronized关键字、volatile变量、线程安全的容器类、线程池(ExecutorService)以及并发工具类如Semaphore、CountDownLatch等,帮助开发者进行高效的并发编程。 五、网络编程 Java的java.net包提供了...

    JavaAPI文档中文版

    10. **并发工具类**:java.util.concurrent包提供了Semaphore、CyclicBarrier、CountDownLatch和ConcurrentHashMap等工具,用于高效、安全的并发编程。 在使用Java API文档中文版时,开发者可以根据类名、方法名或...

    JDK 性能

    JDK的并发编程库(java.util.concurrent)提供了高效线程同步和协作的工具,如Semaphore、CountDownLatch、CyclicBarrier等,这些工具能够帮助我们编写出高效的多线程程序。此外,JDK还引入了Fork/Join框架和Stream ...

    Java助手

    理解线程同步机制(如synchronized关键字,wait()和notify()方法)以及并发工具类(如ExecutorService,Semaphore,CountDownLatch)是编写高并发程序的基础。 7. **反射**:反射机制允许程序在运行时动态地获取类...

    Java程序员面试宝典,Java面试必备PDF文件

    5. **多线程**:Java提供了丰富的多线程支持,面试中可能涉及线程的创建、同步机制(synchronized、Lock)、死锁、线程池以及并发工具类(ExecutorService、CountDownLatch、CyclicBarrier等)。 6. **JVM**:深入...

    求职宝典 - 面试大全

    3. **并发编程**:线程的创建与管理、锁机制(synchronized、Lock)、并发容器(如ConcurrentHashMap、CountDownLatch、CyclicBarrier)以及并发工具类。 4. **Spring框架**:IoC容器、AOP代理、事务管理、Spring ...

    java速查手册(中文版)

    8. **多线程**:线程的创建(通过Thread类或实现Runnable接口)、线程同步(synchronized关键字、wait()、notify()和notifyAll()方法)、线程池的使用(ExecutorService、ThreadPoolExecutor等)。 9. **反射机制**...

    28个java常用的工具类

    9. **并发工具类**:如`ConcurrencyUtils`,包含线程安全的数据结构和同步工具,如`CountDownLatch`用于线程间的等待,`Semaphore`可以控制并发访问资源的数量。 10. **XML处理工具类**:如`XmlUtils`,提供XML的...

    java面试题总结资料.zip

    Java面试是每位Java开发者职业生涯中的重要关卡,它考察了候选人的基础知识、编程能力、问题解决技巧以及对特定框架和...这份资料将是你准备面试的得力助手,确保你在关键时刻能够如虎添翼,展现出专业且全面的技能。

    guava-18.rar

    CountDownLatch则是一种同步辅助类,用于协调多个线程的执行。 四、I/O操作优化 Guava的IO模块提供了流式处理、读写缓冲和文件系统操作的优化工具。例如,CharStreams和ByteStreams可以分别用于字符和字节流的处理...

    Java api最新帮助文档

    这个Java API的帮助文档不仅包含上述内容,还有更多关于异常处理、国际化、注解、并发工具类、GUI编程等方面的详细信息,是开发者日常编码、学习和解决问题的得力助手。通过深入学习和理解这些API,开发者能够更好地...

    java 7 api chm版本

    Java 7 API CHM版本是Java开发者的重要参考资料,它...它不仅是学习和调试Java 7代码的宝贵资源,也是日常开发工作中的得力助手。通过深入理解这些API,开发者能够更好地利用Java 7的功能,编写出高效、可靠的代码。

Global site tag (gtag.js) - Google Analytics