ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/DoubleAdderTest.java
(Generate patch)

Comparing jsr166/src/test/tck/DoubleAdderTest.java (file contents):
Revision 1.3 by jsr166, Thu May 30 03:28:55 2013 UTC vs.
Revision 1.4 by jsr166, Sun Jul 14 19:49:01 2013 UTC

# Line 124 | Line 124 | public class DoubleAdderTest extends JSR
124      /**
125       * adds by multiple threads produce correct sum
126       */
127 <    public void testAddAndSumMT() {
127 >    public void testAddAndSumMT() throws Throwable {
128          final int incs = 1000000;
129          final int nthreads = 4;
130          final ExecutorService pool = Executors.newCachedThreadPool();
131          DoubleAdder a = new DoubleAdder();
132 <        Phaser phaser = new Phaser(nthreads + 1);
132 >        CyclicBarrier barrier = new CyclicBarrier(nthreads + 1);
133          for (int i = 0; i < nthreads; ++i)
134 <            pool.execute(new AdderTask(a, phaser, incs));
135 <        phaser.arriveAndAwaitAdvance();
136 <        phaser.arriveAndAwaitAdvance();
134 >            pool.execute(new AdderTask(a, barrier, incs));
135 >        barrier.await();
136 >        barrier.await();
137          double total = (long)nthreads * incs;
138          double sum = a.sum();
139          assertEquals(sum, total);
# Line 142 | Line 142 | public class DoubleAdderTest extends JSR
142  
143      static final class AdderTask implements Runnable {
144          final DoubleAdder adder;
145 <        final Phaser phaser;
145 >        final CyclicBarrier barrier;
146          final int incs;
147          volatile double result;
148 <        AdderTask(DoubleAdder adder, Phaser phaser, int incs) {
148 >        AdderTask(DoubleAdder adder, CyclicBarrier barrier, int incs) {
149              this.adder = adder;
150 <            this.phaser = phaser;
150 >            this.barrier = barrier;
151              this.incs = incs;
152          }
153  
154          public void run() {
155 <            phaser.arriveAndAwaitAdvance();
156 <            DoubleAdder a = adder;
157 <            for (int i = 0; i < incs; ++i)
158 <                a.add(1.0);
159 <            result = a.sum();
160 <            phaser.arrive();
155 >            try {
156 >                barrier.await();
157 >                DoubleAdder a = adder;
158 >                for (int i = 0; i < incs; ++i)
159 >                    a.add(1.0);
160 >                result = a.sum();
161 >                barrier.await();
162 >            } catch (Throwable t) { throw new Error(t); }
163          }
164      }
165  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines