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

Comparing jsr166/src/test/tck/LongAdderTest.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 147 | Line 147 | public class LongAdderTest extends JSR16
147      /**
148       * adds by multiple threads produce correct sum
149       */
150 <    public void testAddAndSumMT() {
150 >    public void testAddAndSumMT() throws Throwable {
151          final int incs = 1000000;
152          final int nthreads = 4;
153          final ExecutorService pool = Executors.newCachedThreadPool();
154          LongAdder a = new LongAdder();
155 <        Phaser phaser = new Phaser(nthreads + 1);
155 >        CyclicBarrier barrier = new CyclicBarrier(nthreads + 1);
156          for (int i = 0; i < nthreads; ++i)
157 <            pool.execute(new AdderTask(a, phaser, incs));
158 <        phaser.arriveAndAwaitAdvance();
159 <        phaser.arriveAndAwaitAdvance();
157 >            pool.execute(new AdderTask(a, barrier, incs));
158 >        barrier.await();
159 >        barrier.await();
160          long total = (long)nthreads * incs;
161          long sum = a.sum();
162          assertEquals(sum, total);
# Line 165 | Line 165 | public class LongAdderTest extends JSR16
165  
166      static final class AdderTask implements Runnable {
167          final LongAdder adder;
168 <        final Phaser phaser;
168 >        final CyclicBarrier barrier;
169          final int incs;
170          volatile long result;
171 <        AdderTask(LongAdder adder, Phaser phaser, int incs) {
171 >        AdderTask(LongAdder adder, CyclicBarrier barrier, int incs) {
172              this.adder = adder;
173 <            this.phaser = phaser;
173 >            this.barrier = barrier;
174              this.incs = incs;
175          }
176  
177          public void run() {
178 <            phaser.arriveAndAwaitAdvance();
179 <            LongAdder a = adder;
180 <            for (int i = 0; i < incs; ++i)
181 <                a.add(1L);
182 <            result = a.sum();
183 <            phaser.arrive();
178 >            try {
179 >                barrier.await();
180 >                LongAdder a = adder;
181 >                for (int i = 0; i < incs; ++i)
182 >                    a.add(1L);
183 >                result = a.sum();
184 >                barrier.await();
185 >            } catch (Throwable t) { throw new Error(t); }
186          }
187      }
188  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines