面试题:请解释Java中的CountDownLatch类及其应用场景,并说明如何使用CountDownLatch来实现多个线程之间的协调工作

CountDownLatch类的概念和应用场景
  1. 概念
    • CountDownLatch是Java中的一个同步工具类,它允许一个或多个线程等待,直到在其他线程中执行的一组操作完成。
    • 它通过一个计数器来实现,计数器的初始值为正数。当计数器的值减为0时,表示所有需要等待的操作都已完成。
  2. 应用场景
    • 并行计算:将一个大任务分解成多个子任务,每个子任务由一个线程执行。主线程使用CountDownLatch等待所有子任务完成后再继续执行后续操作。
    • 资源初始化:在应用程序启动时,需要初始化多个资源(如数据库连接、缓存等)。可以使用CountDownLatch确保所有资源都初始化完成后,应用程序才正式对外提供服务。
    • 多线程测试:在多线程测试中,可以使用CountDownLatch来同步多个测试线程的执行,确保所有测试线程都执行完毕后再进行结果汇总和分析。
如何使用CountDownLatch实现多个线程之间的协调工作
  1. 创建CountDownLatch对象
    • 在主线程中创建一个CountDownLatch对象,并指定计数器的初始值。例如,如果有3个子任务需要执行,则创建一个初始值为3的CountDownLatch对象:
import java.util.concurrent.CountDownLatch; 
 
public class CountDownLatchExample {
    public static void main(String[] args) {
        int numberOfTasks = 3;
        CountDownLatch latch = new CountDownLatch(numberOfTasks);
        // ...
    }
}
  1. 子线程执行任务并减少计数器
    • 在每个子线程中执行任务,当任务完成后,调用CountDownLatch对象的countDown()方法来减少计数器的值。
public class SubTask implements Runnable {
    private CountDownLatch latch;
 
    public SubTask(CountDownLatch latch) {
        this.latch  = latch;
    }
 
    @Override 
    public void run() {
        try {
            // 执行子任务逻辑 
            System.out.println("Sub  - task is running");
            Thread.sleep(1000); 
            System.out.println("Sub  - task is completed");
        } catch (InterruptedException e) {
            e.printStackTrace(); 
        } finally {
            latch.countDown(); 
        }
    }
}
  1. 主线程等待所有子任务完成
    • 在主线程中调用CountDownLatch对象的await()方法,使主线程进入等待状态,直到计数器的值减为0。
public class CountDownLatchExample {
    public static void main(String[] args) {
        int numberOfTasks = 3;
        CountDownLatch latch = new CountDownLatch(numberOfTasks);
        for (int i = 0; i < numberOfTasks; i++) {
            Thread thread = new Thread(new SubTask(latch));
            thread.start(); 
        }
        try {
            latch.await(); 
            System.out.println("All  sub - tasks are completed");
        } catch (InterruptedException e) {
            e.printStackTrace(); 
        }
    }
}
总结

CountDownLatch是一种非常有用的同步工具类,适用于多个线程之间的协调工作。通过创建CountDownLatch对象、在子线程中执行任务并减少计数器、在主线程中等待计数器减为0,可以轻松实现多个线程之间的同步操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胡子发芽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值