最近在看ZK的源码,看到了有用到java.util.concurrent.CountDownLatch 这个类。总结一下用法:
CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。 主要方法 public CountDownLatch(int count); public void countDown(); public void await() throws InterruptedException 构造方法参数指定了计数的次数 countDown方法,当前线程调用此方法,则计数减1 awaint方法,调用此方法会一直阻塞当前线程,直到计时器的值为0
下面通过一个例子展示,程序会一直等待countDownLatch的值变成0,才会打印出:“工人们做完了。”。
package com.get.set;
import java.util.concurrent.CountDownLatch;
public class CountDownLatchDemo{
public static void main(String args[]){
CountDownLatch countDownLatch=new CountDownLatch(2);
Worker workA=new Worker("wjy", countDownLatch);
Worker workB=new Worker("yuanyuan", countDownLatch);
workA.start();
workB.start();
try {
countDownLatch.await();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("工人们做完了。");
}
static class Worker extends Thread{
private String name;
private CountDownLatch countDownLatch;
public Worker(String name,CountDownLatch countDownLatch){
this.name=name;
this.countDownLatch=countDownLatch;
}
@Override
public void run(){
System.out.println("Hello, I am "+name);
this.countDownLatch.countDown();
}
}
}
//运行结果:
Hello, I am wjy
Hello, I am yuanyuan
工人们做完了。
注意:如果我们把CountDownLatch的初始值设为3,那么在上面这个程序中永远都不会打印出“工人们做完了。”
因为,程序会一直等待countDownLatch的值变成0.但是countDownLatch的值永远不可能变成0了。
相关推荐
小结 本文讲述了如何使用 CountDownLatch 来实现异步回调,并探讨了相关的知识点。 CountDownLatch 是一个非常有用的工具,能够帮助我们在多线程环境中实现异步回调。然而,在使用 CountDownLatch 时,需要注意一些...
6. 小结 本文详细解析了CountDownLatch源码中的countDown()方法,揭示了其内部实现机制。通过对tryReleaseShared()方法和doReleaseShared()方法的实现原理的分析,我们可以更好地理解CountDownLatch的工作机制,并...
### Java多线程小结 #### 一、多线程的概念与意义 多线程是Java编程中的一个重要概念,指的是程序在运行时可以同时执行多个线程的能力。它能够提高程序的性能,尤其是在多核处理器的环境下。多线程使得程序能够更...
- **CountDownLatch、CyclicBarrier、Semaphore**:同步工具类,用于协调多线程间的协作。 通过深入学习这些知识点,并结合思维导图,可以帮助开发者更好地理解和管理Java线程,提高程序的并发性能和稳定性。在...
`Runnable`接口和`Callable`接口的区别在于`Runnable.run()`方法没有返回值,仅用于执行指定任务,而`Callable.call()`方法有返回值,适合于异步计算并获取结果。与`Future`和`FutureTask`结合使用,可以监控线程...
【Java项目开发PPT】是针对Java编程语言的实践应用教学资源,主要目的是在30天...此外,PPT中的每一页都可能包含小结和习题,以巩固学习效果。通过这样的学习计划,学习者可以在短时间内建立起坚实的Java项目开发基础。
1. **Java线程小结**:这部分内容可能涉及多线程编程的基础知识,如线程的创建、同步机制(synchronized、Lock等)、并发工具类(Semaphore、CountDownLatch、CyclicBarrier等),以及线程安全问题和解决方案。...
#### 九、小结 Java多线程是一个庞大且复杂的主题,涉及线程的创建、调度、同步等多个方面。通过深入理解上述知识点,开发者能够更好地利用Java的多线程特性来构建高性能、高并发的应用程序。此外,Java 5及其后续...