说明:Java & Go 并发编程序列的文章,根据每篇文章的主题或细分标题,分别演示 Java 和 Go 语言当中的相关实现。更多该系列文章请查看:Java & Go 并发编程系列
本文介绍 Java 和 Go 语言中如何实现并发编程中等待一组并发任务完成的场景。
代码场景:假设有一道题目,同时分发给10个同学来完成,所有同学完成之后,老师公布答案。
「Java」CountDownLatch
使用 CountDownLatch 等待一组并发任务的完成,包含如下三要素:
- 一个初始值,即定义需要等待的任务的数目
- await() 需要等待并发任务先完成的线程调用
- countDown(),每个任务在完成的时候调用
public static void main(String[] args) throws InterruptedException {
// 声明初始计数为10
CountDownLatch countDownLatch = new CountDownLatch(10);
// 起10个线程模拟10个同学做题目
for (int i = 0; i < 10; i++) {
Thread t = new Thread(() -> {
// 生成从1-10的随机整数,模拟做题目花费的时间
int randomSecond = ThreadLocalRandom.current().nextInt(10) + 1;
try {
TimeUnit.SECONDS.sleep(randomSecond);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.printf("第%s号同学用时%ds完成了题目\n", Thread.cur