--- jsr166/src/test/tck/DoubleAdderTest.java 2013/05/30 03:28:55 1.3 +++ jsr166/src/test/tck/DoubleAdderTest.java 2013/07/14 19:49:01 1.4 @@ -124,16 +124,16 @@ public class DoubleAdderTest extends JSR /** * adds by multiple threads produce correct sum */ - public void testAddAndSumMT() { + public void testAddAndSumMT() throws Throwable { final int incs = 1000000; final int nthreads = 4; final ExecutorService pool = Executors.newCachedThreadPool(); DoubleAdder a = new DoubleAdder(); - Phaser phaser = new Phaser(nthreads + 1); + CyclicBarrier barrier = new CyclicBarrier(nthreads + 1); for (int i = 0; i < nthreads; ++i) - pool.execute(new AdderTask(a, phaser, incs)); - phaser.arriveAndAwaitAdvance(); - phaser.arriveAndAwaitAdvance(); + pool.execute(new AdderTask(a, barrier, incs)); + barrier.await(); + barrier.await(); double total = (long)nthreads * incs; double sum = a.sum(); assertEquals(sum, total); @@ -142,22 +142,24 @@ public class DoubleAdderTest extends JSR static final class AdderTask implements Runnable { final DoubleAdder adder; - final Phaser phaser; + final CyclicBarrier barrier; final int incs; volatile double result; - AdderTask(DoubleAdder adder, Phaser phaser, int incs) { + AdderTask(DoubleAdder adder, CyclicBarrier barrier, int incs) { this.adder = adder; - this.phaser = phaser; + this.barrier = barrier; this.incs = incs; } public void run() { - phaser.arriveAndAwaitAdvance(); - DoubleAdder a = adder; - for (int i = 0; i < incs; ++i) - a.add(1.0); - result = a.sum(); - phaser.arrive(); + try { + barrier.await(); + DoubleAdder a = adder; + for (int i = 0; i < incs; ++i) + a.add(1.0); + result = a.sum(); + barrier.await(); + } catch (Throwable t) { throw new Error(t); } } }