--- jsr166/src/test/tck/DoubleAdderTest.java 2013/03/22 16:10:19 1.2 +++ jsr166/src/test/tck/DoubleAdderTest.java 2014/12/31 19:05:42 1.5 @@ -4,10 +4,14 @@ * http://creativecommons.org/publicdomain/zero/1.0/ */ -import junit.framework.*; -import java.util.concurrent.*; +import java.util.concurrent.CyclicBarrier; +import java.util.concurrent.Executors; +import java.util.concurrent.ExecutorService; import java.util.concurrent.atomic.DoubleAdder; +import junit.framework.Test; +import junit.framework.TestSuite; + public class DoubleAdderTest extends JSR166TestCase { public static void main(String[] args) { junit.textui.TestRunner.run(suite()); @@ -63,7 +67,7 @@ public class DoubleAdderTest extends JSR public void testSerialization() throws Exception { DoubleAdder x = new DoubleAdder(); DoubleAdder y = serialClone(x); - assertTrue(x != y); + assertNotSame(x, y); x.add(-22.0); DoubleAdder z = serialClone(x); assertEquals(-22.0, x.sum()); @@ -124,16 +128,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 +146,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); } } }