/* * This file is a modified version of * http://gee.cs.oswego.edu/cgi-bin/viewcvs.cgi/jsr166/src/main/java/util/concurrent/CountDownLatch.java?revision=1.43 * which contained the following notice: * * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/publicdomain/zero/1.0/ */ package java.util.concurrent; /** * Emulation of CountDownLatch in GWT. Since GWT environment is single threaded, attempting to block * on the latch by calling {@link #await()} or {@link #await(long, TimeUnit)} when it is not ready * is considered illegal because it would lead to a deadlock. Both methods will throw {@link * IllegalStateException} to avoid the deadlock. */ public class CountDownLatch { private int count; public CountDownLatch(int count) { if (count < 0) { throw new IllegalArgumentException("count < 0"); } this.count = count; } public void await() throws InterruptedException { if (count > 0) { throw new IllegalStateException("May not block. Count is " + count); } } public boolean await(long timeout, TimeUnit unit) throws InterruptedException { await(); return true; } public void countDown() { if (count > 0) { count--; } } public long getCount() { return count; } public String toString() { return super.toString() + "[Count = " + count + "]"; } }