倒计数锁存器是一次性的障碍,允许一个或多个线程等待一个或多个其他线程来做某些事情。CountDownLatch的唯一构造器带有一个 int类型的参数,这个参数是指允许所有在等待的线程被处理之前,必须在锁存器上调用countDown方法的次数。
//多个任务执行时间计时
public static long time(Executor executor,int concurrency,final Runnable action) throws InterruptedException {
final CountDownLatch ready = new CountDownLatch(concurrency);
final CountDownLatch start = new CountDownLatch(1);
final CountDownLatch done = new CountDownLatch(concurrency);
for (int i = 0;i<concurrency;i++){
executor.execute(new Runnable() {
@Override
public void run() {
ready.countDown();
try {
start.await();
action.run();
}catch (InterruptedException e){
Thread.currentThread().interrupt();
}finally {
done.countDown();
}
}
});
}
ready.await();
long startNanos = System.nanoTime();
start.countDown();
done.await();
return System.nanoTime()-startNanos;
}