< prev index next >

test/jdk/java/util/concurrent/atomic/LongAdderDemo.java

Print this page
8211283: Miscellaneous changes imported from jsr166 CVS 2018-11
Reviewed-by: martin, chegar


  76     }
  77 
  78     static void casTest(int nthreads, int incs) {
  79         System.out.print("AtomicLong ");
  80         Phaser phaser = new Phaser(nthreads + 1);
  81         AtomicLong a = new AtomicLong();
  82         for (int i = 0; i < nthreads; ++i)
  83             pool.execute(new CasTask(a, phaser, incs));
  84         report(nthreads, incs, timeTasks(phaser), a.get());
  85     }
  86 
  87     static void adderTest(int nthreads, int incs) {
  88         System.out.print("LongAdder  ");
  89         Phaser phaser = new Phaser(nthreads + 1);
  90         LongAdder a = new LongAdder();
  91         for (int i = 0; i < nthreads; ++i)
  92             pool.execute(new AdderTask(a, phaser, incs));
  93         report(nthreads, incs, timeTasks(phaser), a.sum());
  94     }
  95 
  96     static void report(int nthreads, int incs, long time, long sum) {
  97         long total = (long)nthreads * incs;
  98         if (sum != total)
  99             throw new Error(sum + " != " + total);
 100         double secs = (double)time / (1000L * 1000 * 1000);
 101         long rate = total * (1000L) / time;
 102         System.out.printf("threads:%3d  Time: %7.3fsec  Incs per microsec: %4d\n",
 103                           nthreads, secs, rate);
 104     }
 105 
 106     static long timeTasks(Phaser phaser) {
 107         phaser.arriveAndAwaitAdvance();
 108         long start = System.nanoTime();
 109         phaser.arriveAndAwaitAdvance();
 110         phaser.arriveAndAwaitAdvance();
 111         return System.nanoTime() - start;
 112     }
 113 
 114     static final class AdderTask implements Runnable {
 115         final LongAdder adder;
 116         final Phaser phaser;
 117         final int incs;
 118         volatile long result;
 119         AdderTask(LongAdder adder, Phaser phaser, int incs) {
 120             this.adder = adder;
 121             this.phaser = phaser;
 122             this.incs = incs;
 123         }




  76     }
  77 
  78     static void casTest(int nthreads, int incs) {
  79         System.out.print("AtomicLong ");
  80         Phaser phaser = new Phaser(nthreads + 1);
  81         AtomicLong a = new AtomicLong();
  82         for (int i = 0; i < nthreads; ++i)
  83             pool.execute(new CasTask(a, phaser, incs));
  84         report(nthreads, incs, timeTasks(phaser), a.get());
  85     }
  86 
  87     static void adderTest(int nthreads, int incs) {
  88         System.out.print("LongAdder  ");
  89         Phaser phaser = new Phaser(nthreads + 1);
  90         LongAdder a = new LongAdder();
  91         for (int i = 0; i < nthreads; ++i)
  92             pool.execute(new AdderTask(a, phaser, incs));
  93         report(nthreads, incs, timeTasks(phaser), a.sum());
  94     }
  95 
  96     static void report(int nthreads, int incs, long elapsedNanos, long sum) {
  97         long total = (long)nthreads * incs;
  98         if (sum != total)
  99             throw new Error(sum + " != " + total);
 100         double elapsedSecs = (double)elapsedNanos / (1000L * 1000 * 1000);
 101         long rate = total * 1000L / elapsedNanos;
 102         System.out.printf("threads:%3d  Time: %7.3fsec  Incs per microsec: %4d\n",
 103                           nthreads, elapsedSecs, rate);
 104     }
 105 
 106     static long timeTasks(Phaser phaser) {
 107         phaser.arriveAndAwaitAdvance();
 108         long start = System.nanoTime();
 109         phaser.arriveAndAwaitAdvance();
 110         phaser.arriveAndAwaitAdvance();
 111         return System.nanoTime() - start;
 112     }
 113 
 114     static final class AdderTask implements Runnable {
 115         final LongAdder adder;
 116         final Phaser phaser;
 117         final int incs;
 118         volatile long result;
 119         AdderTask(LongAdder adder, Phaser phaser, int incs) {
 120             this.adder = adder;
 121             this.phaser = phaser;
 122             this.incs = incs;
 123         }


< prev index next >