CountDownLatch的作用是,线程进入等待后,需要计数器达到0才能通行。
- CountDownLatch(int)
构造方法,指定初始计数。 - await()
等待计数减至0。 - await(long, TimeUnit)
在指定时间内,等待计数减至0。 - countDown()
计数减1。 - getCount()
获取剩余计数。
例子 //使用4个子线程求出1到100的和。且每个子线程只能计算25个数。主线程必须等待子线程的计算结果。 class QiuHe extends Thread{ int index; //线程编号 int sum=0; //保存每个线程所求的25个数的和值 CountDownLatch countDownLatch;//多线程条件通行工具 QiuHe(int nindex, CountDownLatch countDownLatch){ index=nindex; this.countDownLatch = countDownLatch; } public void run() { for(int i=0;i<25;i++) { sum=sum+index*25+i+1; } // 标记计算结束,结束则countDownLatch减一 countDownLatch.countDown(); } } class test1 { public static void main(String args[]) { CountDownLatch countDownLatch = new CountDownLatch(3);//给定countDownLatch初始值为3 QiuHe q[]=new QiuHe[4]; for(int i=0;i<4;i++){ q[i]=new QiuHe(i, countDownLatch); q[i].start(); } try { // 等待子线程结束,countDownLatch为0才能运行,不为0则阻塞,所以能实现主线程必须等待子线程的计算结果 countDownLatch.await(); } catch (InterruptedException e) { } System.out.println("sum="+(q[0].sum+q[1].sum+q[2].sum+q[3].sum)); } }