Java之CountDownLatch示例说明
下文笔者讲述CountDownLatch的功能简介及示例说明
学习完本篇之后,你将掌握CountDownLatch的简介说明,如下所示
学习完本篇之后,你将掌握CountDownLatch的简介说明,如下所示
CountDownLatch简介
CountDownLatch是一个同步工具类
它使用一个计数器来实现的
初始值为线程的数量
每当一个线程完成了自己的任务
计数器的值就相应得减1
当计数器到达0时
表示所有的线程都已运行完毕
然后在等待的线程就可以恢复执行任务
CountDownLatch中方法简介
CountDownLatch(int count):
count为计数器的初始值
(一般需要多少个线程执行
count就设为几)
countDown():
每调用一次计数器值-1
直到count被减为0
代表所有线程全部执行完毕。
getCount():
获取当前计数器的值
await():
等待计数器变为0
即等待所有异步线程执行完毕。
boolean await(long timeout, TimeUnit unit):
此方法与await()区别:
此方法至多会等待指定的时间
超时后会自动唤醒
若timeout小于等于零,则不会等待
boolean 类型返回值:
若计数器变为零,
则返回 true;
若指定的等待时间过去
则返回 false
CountDownLatch应用场景
1.某个线程需要在其他n个线程执行完毕后再向下运行 2.多个线程并行执行同一个任务,提高响应速度
CountDownLatch示例
package com.java265;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
public class TestCountDownLatch {
private static CountDownLatch countDownLatch = new CountDownLatch(3);//设定计数(只能使用一次不能重用)
public static void main(String[] args) {
waitThread();
threadRun(1);
threadRun(2);
threadRun(3);
}
public static void waitThread() {
new Thread(() -> {
System.out.println("run wait thread");
System.out.println("起始计数:" + countDownLatch.getCount());
try {
countDownLatch.await(1, TimeUnit.SECONDS);//阻塞直到计数为0或者超时
System.out.println("超时结束第一个阻塞,计数:" + countDownLatch.getCount());
countDownLatch.await();//阻塞直到计数为0
System.out.println("结束第二个阻塞,计数:" + countDownLatch.getCount());
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("wait thread finished");
}).start();
}
public static void threadRun(final int i) {
new Thread(() -> {
System.out.println("run thread " + i);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("thread " + i + " 计数减1");
countDownLatch.countDown();//计数减1
}).start();
}
}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


