--- jsr166/src/test/tck/CyclicBarrierTest.java 2011/05/28 14:52:11 1.21 +++ jsr166/src/test/tck/CyclicBarrierTest.java 2011/11/26 05:19:17 1.25 @@ -8,9 +8,11 @@ import junit.framework.*; import java.util.*; -import java.util.concurrent.*; -import java.util.concurrent.locks.*; -import java.util.concurrent.atomic.*; +import java.util.concurrent.BrokenBarrierException; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.CyclicBarrier; +import java.util.concurrent.TimeoutException; +import java.util.concurrent.atomic.AtomicBoolean; import static java.util.concurrent.TimeUnit.MILLISECONDS; public class CyclicBarrierTest extends JSR166TestCase { @@ -27,6 +29,18 @@ public class CyclicBarrierTest extends J } /** + * Spin-waits till the number of waiters == numberOfWaiters. + */ + void awaitNumberWaiting(CyclicBarrier barrier, int numberOfWaiters) { + long startTime = System.nanoTime(); + while (barrier.getNumberWaiting() != numberOfWaiters) { + if (millisElapsedSince(startTime) > LONG_DELAY_MS) + fail("timed out"); + Thread.yield(); + } + } + + /** * Creating with negative parties throws IAE */ public void testConstructor1() { @@ -78,7 +92,7 @@ public class CyclicBarrierTest extends J b.await(); b.await(); assertEquals(0, b.getNumberWaiting()); - assertEquals(countAction, 2); + assertEquals(2, countAction); } /** @@ -186,8 +200,7 @@ public class CyclicBarrierTest extends J }}); Thread t2 = newStartedThread(new CheckedRunnable() { public void realRun() throws Exception { - while (c.getNumberWaiting() == 0) - Thread.yield(); + awaitNumberWaiting(c, 1); long startTime = System.nanoTime(); try { c.await(timeoutMillis(), MILLISECONDS); @@ -215,8 +228,7 @@ public class CyclicBarrierTest extends J }}); Thread t2 = newStartedThread(new CheckedRunnable() { public void realRun() throws Exception { - while (c.getNumberWaiting() == 0) - Thread.yield(); + awaitNumberWaiting(c, 1); long startTime = System.nanoTime(); try { c.await(timeoutMillis(), MILLISECONDS); @@ -250,6 +262,8 @@ public class CyclicBarrierTest extends J t1.start(); t2.start(); await(pleaseReset); + + awaitNumberWaiting(c, 2); c.reset(); awaitTermination(t1); awaitTermination(t2); @@ -386,8 +400,7 @@ public class CyclicBarrierTest extends J }}); Thread t2 = newStartedThread(new CheckedRunnable() { public void realRun() throws Exception { - while (barrier.getNumberWaiting() == 0) - Thread.yield(); + awaitNumberWaiting(barrier, 1); long startTime = System.nanoTime(); try { barrier.await(timeoutMillis(), MILLISECONDS); @@ -432,7 +445,7 @@ public class CyclicBarrierTest extends J t1.start(); t2.start(); start.await(); - while (barrier.getNumberWaiting() < 2) { Thread.yield(); } + awaitNumberWaiting(barrier, 2); try { barrier.await(); shouldThrow();