CountDownLatch 最常见的用法:初始化一个整数的计数。它的countDown()方法用来对计数器做减法操作。当计数器为零时,所有等待的线程都可以通过。
下面我们来看下CountDownLatch都有那些方法:
await() | 当计数器不为零的时候等待 |
await(long timeout, TimeUnit unit) | 等待计数器不为零的时间。如果超过timeout则抛出InterruptedException.当在timeout时间内计数器为零了,则继续执行 |
countDown() | 计数器减去1 |
getCount() | 获取当前计数器值 |
package com.asiainfo.concurrent; import java.util.concurrent.CountDownLatch; /** * 关卡测试 * * @author fansh * */ public class LatchTest { public static void main(String[] args) { final CountDownLatch run = new CountDownLatch(5); final CountDownLatch start = new CountDownLatch(1); for (int i = 0; i < 5; i++) { Thread t = new Thread() { @Override public void run() { try { start.await(); } catch (InterruptedException e) { e.printStackTrace(); } finally { System.out.println("线程" + Thread.currentThread().getName() + "将计数器减1........."); run.countDown(); } } }; t.start(); } System.out.println("run 线程的计数器为" + run.getCount()); start.countDown(); try { run.await(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("run 线程的计数器为" + run.getCount()); System.out.println("等待五个线程运行完毕"); } }