Java:CountDownLatch等待所有线程执行结束后继续执行

简介: Java:CountDownLatch等待所有线程执行结束后继续执行

CountDownLatch可以使一个或多个线程等待其他线程各自执行完毕后再执行

class WorkThread implements Runnable {
    private CountDownLatch countDownLatch;
    public WorkThread(CountDownLatch countDownLatch) {
        this.countDownLatch = countDownLatch;
    }
    @Override
    public void run() {
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(Thread.currentThread().getName() + " 干活结束");
        this.countDownLatch.countDown();
    }
}
package com.demo.atomic;
import java.util.concurrent.CountDownLatch;
public class countDownLatchDemo {
    public static void main(String[] args) {
        // 初始化等待线程个数: 2个
        CountDownLatch countDownLatch = new CountDownLatch(2);
        WorkThread workThread1 = new WorkThread(countDownLatch);
        WorkThread workThread2 = new WorkThread(countDownLatch);
        new Thread(workThread1).start();
        new Thread(workThread2).start();
        // 阻塞主线程,等待子线程全部结束继续
        try {
            countDownLatch.await();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("结束了");
    }
}

如果不等待,执行结果

结束了
Thread-0 干活结束
Thread-1 干活结束

如果等待, 执行结果

Thread-1 干活结束
Thread-0 干活结束
结束了
相关文章
|
2天前
|
Java 数据库
【Java多线程】对线程池的理解并模拟实现线程池
【Java多线程】对线程池的理解并模拟实现线程池
11 1
|
1天前
|
安全 Java
【JAVA进阶篇教学】第十篇:Java中线程安全、锁讲解
【JAVA进阶篇教学】第十篇:Java中线程安全、锁讲解
|
1天前
|
安全 Java
【JAVA进阶篇教学】第六篇:Java线程中状态
【JAVA进阶篇教学】第六篇:Java线程中状态
|
1天前
|
缓存 Java
【JAVA进阶篇教学】第五篇:Java多线程编程
【JAVA进阶篇教学】第五篇:Java多线程编程
|
1天前
|
Java
【JAVA基础篇教学】第十二篇:Java中多线程编程
【JAVA基础篇教学】第十二篇:Java中多线程编程
|
1天前
|
安全 Java
java-多线程学习记录
java-多线程学习记录
|
2天前
|
Java
【Java多线程】面试常考 —— JUC(java.util.concurrent) 的常见类
【Java多线程】面试常考 —— JUC(java.util.concurrent) 的常见类
12 0
|
2天前
|
设计模式 消息中间件 安全
【Java多线程】关于多线程的一些案例 —— 单例模式中的饿汉模式和懒汉模式以及阻塞队列
【Java多线程】关于多线程的一些案例 —— 单例模式中的饿汉模式和懒汉模式以及阻塞队列
9 0
|
2天前
|
安全 Java 程序员
【Java多线程】面试常考——锁策略、synchronized的锁升级优化过程以及CAS(Compare and swap)
【Java多线程】面试常考——锁策略、synchronized的锁升级优化过程以及CAS(Compare and swap)
6 0
|
2天前
|
Java
【Java多线程】分析线程加锁导致的死锁问题以及解决方案
【Java多线程】分析线程加锁导致的死锁问题以及解决方案
11 1