Android并发编程三剑客:深入理解CountDownLatch、CyclicBarrier和Semaphore
目录
-
- 一、 CountDownLatch:耐心的协调者
- 二、CyclicBarrier:团队的集合点
- 三、Semaphore:资源的看门人
- 总结与对比
- 选择指南
在Android开发中,处理多线程并发是一个无法回避的课题。无论是为了提升应用响应速度,还是高效处理后台任务,我们都需要强大的工具来管理线程间的协作。今天,我们就来深入探讨Java并发包中三个至关重要的同步工具类: CountDownLatch、CyclicBarrier 和 Semaphore,它们堪称Android并发编程的“三剑客”。同时,该文也是针对 Android线程与线程池面试题总结文中4.3节的解答。
一、 CountDownLatch:耐心的协调者
核心思想: 像一个田径教练,他需要等待所有运动员(子线程)都冲过终点线后,才能宣布比赛结束(主线程继续)。
主要用途:
- 启动准备: 确保所有必要的服务或组件都初始化完成后,再让主线程继续。
- 多任务汇总: 等待多个并行计算任务全部完成,再汇总最终结果。
工作原理:
它通过一个计数器工作,构造时传入初始值N。
- 每个子线程完成任务后,调用countDown()方法,计数器减1.
- 主线程调用await()方法,会阻塞直到计数器变为0.
代码示例:
// 模拟应用启动时,等待3个核心服务加载完成
val startLatch = CountDownLatch(3)// 服务A
thread {// 模拟加载耗时Thread.sleep(1000)Log.d("Concurrent", "服务A加载完毕")startLatch.countDown()
}// 服务B
thread {Thread.sleep(1500)Log.d("Concurrent", "服务B加载