CountDownLatch的作用是,线程进入等待后,需要计数器达到0才能通行。
- CountDownLatch(int)
构造方法,指定初始计数。 - await()
等待计数减至0。 - await(long, TimeUnit)
在指定时间内,等待计数减至0。 - countDown()
计数减1。 - getCount()
获取剩余计数。
例子
//使用4个子线程求出1到100的和。且每个子线程只能计算25个数。主线程必须等待子线程的计算结果。
class QiuHe extends Thread{
int index; //线程编号
int sum=0; //保存每个线程所求的25个数的和值
CountDownLatch countDownLatch;//多线程条件通行工具
QiuHe(int nindex, CountDownLatch countDownLatch){
index=nindex;
this.countDownLatch = countDownLatch;
}
public void run() {
for(int i=0;i<25;i++) {
sum=sum+index*25+i+1;
}
// 标记计算结束,结束则countDownLatch减一
countDownLatch.countDown();
}
}
class test1 {
public static void main(String args[]) {
CountDownLatch countDownLatch = new CountDownLatch(3);//给定countDownLatch初始值为3
QiuHe q[]=new QiuHe[4];
for(int i=0;i<4;i++){
q[i]=new QiuHe(i, countDownLatch);
q[i].start();
}
try {
// 等待子线程结束,countDownLatch为0才能运行,不为0则阻塞,所以能实现主线程必须等待子线程的计算结果
countDownLatch.await();
} catch (InterruptedException e) {
}
System.out.println("sum="+(q[0].sum+q[1].sum+q[2].sum+q[3].sum));
}
}
本文详细介绍了CountDownLatch在Java并发编程中的应用,通过一个求和的实例,展示了如何使用CountDownLatch来协调多个线程,确保主线程在所有子线程完成任务后再继续执行。

4030

被折叠的 条评论
为什么被折叠?



