- CountDownLatch的介绍
类CountDownLatch是同步功能得一个辅助类,使用效果就是给定一个计数,当使用CountDownLatch类的线程判断计数不为0时,则呈wait状态,如果是0则继续运行。
实现等待与继续运行的效果分别需要使用awit()和countDown()方法来进行。调用awit()方法时判断计数是否为0,如果不为0则呈等待状态。其他线程可以调用countDown()方法将计数减1,当计数减到0时,呈等待的线程继续运行。需要特别说明的是,计数无法被重置。
- 实例
模拟田径比赛,运动员准备
package com.wjg.unit_2_1_2; import java.util.concurrent.CountDownLatch; public class Run { public static void main(String[] args) throws InterruptedException { CountDownLatch maxRunner = new CountDownLatch(10); Run run = new Run(); for (int i = 0; i < maxRunner.getCount(); i++) { MyThread thread = run.new MyThread(maxRunner); thread.setName("运动员"+(i+1)); thread.start(); } maxRunner.await(); System.out.println("全部到了"); } public class MyThread extends Thread{ private CountDownLatch maxRunner; public MyThread(CountDownLatch maxRunner) { super(); this.maxRunner = maxRunner; } @Override public void run() { try { Thread.sleep(2000); System.out.println(this.getName()+"到了"); maxRunner.countDown(); } catch (InterruptedException e) { e.printStackTrace(); } } } }
运行结果:
运动员4达到了
运动员5达到了
运动员2达到了
运动员10达到了
运动员3达到了
运动员9达到了
运动员8达到了
运动员1达到了
运动员7达到了
运动员6达到了
全部到了
- 方法awit(long timeout,TimeUnit unit)
作用是使线程在指定的最大时间单位内进入WAITING状态,如果超过这个时间则自动唤醒,程序继续向下执行。
- 方法getCount()
获取当前CountDownLatch的值。