--- jsr166/src/test/tck/LongAdderTest.java 2013/03/22 16:10:19 1.2 +++ jsr166/src/test/tck/LongAdderTest.java 2014/12/31 19:05:43 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.LongAdder; +import junit.framework.Test; +import junit.framework.TestSuite; + public class LongAdderTest extends JSR166TestCase { public static void main(String[] args) { junit.textui.TestRunner.run(suite()); @@ -85,9 +89,10 @@ public class LongAdderTest extends JSR16 public void testSerialization() throws Exception { LongAdder x = new LongAdder(); LongAdder y = serialClone(x); - assertTrue(x != y); + assertNotSame(x, y); x.add(-22); LongAdder z = serialClone(x); + assertNotSame(y, z); assertEquals(-22, x.sum()); assertEquals(0, y.sum()); assertEquals(-22, z.sum()); @@ -146,16 +151,16 @@ public class LongAdderTest extends JSR16 /** * 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(); LongAdder a = new LongAdder(); - 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(); long total = (long)nthreads * incs; long sum = a.sum(); assertEquals(sum, total); @@ -164,22 +169,24 @@ public class LongAdderTest extends JSR16 static final class AdderTask implements Runnable { final LongAdder adder; - final Phaser phaser; + final CyclicBarrier barrier; final int incs; volatile long result; - AdderTask(LongAdder adder, Phaser phaser, int incs) { + AdderTask(LongAdder adder, CyclicBarrier barrier, int incs) { this.adder = adder; - this.phaser = phaser; + this.barrier = barrier; this.incs = incs; } public void run() { - phaser.arriveAndAwaitAdvance(); - LongAdder a = adder; - for (int i = 0; i < incs; ++i) - a.add(1L); - result = a.sum(); - phaser.arrive(); + try { + barrier.await(); + LongAdder a = adder; + for (int i = 0; i < incs; ++i) + a.add(1L); + result = a.sum(); + barrier.await(); + } catch (Throwable t) { throw new Error(t); } } }