/* * CountDownLatch.java * * Created on August 27, 2006, 9:03 PM * * From "The Art of Multiprocessor Programming", * by Maurice Herlihy and Nir Shavit. * Copyright 2006 Elsevier Inc. All rights reserved. */ package monitor; import java.util.concurrent.locks.*; import java.util.concurrent.atomic.*; /** * Faux implementation of CountDownLatch from java.util.concurrent. * * @author Maurice Herlihy */ public class CountDownLatch { int counter; Lock lock; Condition condition; public CountDownLatch(int count) { if (count < 0) throw new IllegalArgumentException("count < 0"); counter = count; lock = new ReentrantLock(); condition = lock.newCondition(); } public void await() throws InterruptedException { lock.lock(); try { while (counter > 0) condition.await(); } finally { lock.unlock(); } } public void countDown() { lock.lock(); try { counter--; if (counter == 0) { condition.signalAll(); } } finally { lock.unlock(); } } }