1.概述
- CountDownLatch有两种典型用法:
- 1.让一些线程阻塞直到另一些线程完成一系列操作后才被唤醒
- 将 CountDownLatch 的计数器初始化为n :new CountDownLatch(n),每当一个任务线程执行完毕,就将计数器减1
- CountDownLatch主要有两个方法,
- 当一个或多个线程调用await方法时,调用线程会被阻塞
- 其他线程调用countDown方法会将计数器减1(调用countDown方法的线程不会阻塞)
- 当计数器的值变为0时,因调用await方法被阻塞的线程会被唤醒,继续执行
- 2.实现多个线程开始执行任务的最大并行性
- 注意是并行性,不是并发,强调的是多个线程在某一时刻同时开始执行。类似于赛跑,将多个线程放到起点,等待发令枪响,然后同时开跑。做法是初始化一个共享的 CountDownLatch 对象,将其计数器初始化为 1 :new CountDownLatch(1),多个线程在开始执行任务前首先 coundownlatch.await(),当主线程调用 countDown() 时,计数器变为0,多个线程同时被唤醒。
- 1.让一些线程阻塞直到另一些线程完成一系列操作后才被唤醒
2.使用案例
使用案例1:
- 需求:模拟6位同学在上仔细,陆续离开,班长最后锁门走人
不使用CountDownLatch<