< prev index next >

test/jdk/java/util/concurrent/locks/ReentrantLock/SimpleReentrantLockLoops.java

Print this page
8229442: AQS and lock classes refresh
Reviewed-by: martin


  78         private int v = ThreadLocalRandom.current().nextInt();
  79         private volatile int result = 17;
  80         private final ReentrantLock lock = new ReentrantLock();
  81         private final LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer();
  82         private final CyclicBarrier barrier;
  83         private final int nthreads;
  84         ReentrantLockLoop(int nthreads) {
  85             this.nthreads = nthreads;
  86             barrier = new CyclicBarrier(nthreads+1, timer);
  87         }
  88 
  89         final void test() throws Exception {
  90             for (int i = 0; i < nthreads; ++i)
  91                 pool.execute(this);
  92             barrier.await();
  93             barrier.await();
  94             if (print) {
  95                 long time = timer.getTime();
  96                 long tpi = time / ((long)iters * nthreads);
  97                 System.out.print("\t" + LoopHelpers.rightJustify(tpi) + " ns per lock");
  98                 double secs = (double)(time) / 1000000000.0;
  99                 System.out.println("\t " + secs + "s run time");
 100             }
 101 
 102             int r = result;
 103             if (r == 0) // avoid overoptimization
 104                 System.out.println("useless result: " + r);
 105         }
 106 
 107         public final void run() {
 108             try {
 109                 barrier.await();
 110                 int sum = v;
 111                 int x = 0;
 112                 int n = iters;
 113                 do {
 114                     lock.lock();
 115                     try {
 116                         if ((n & 255) == 0)
 117                             v = x = LoopHelpers.compute2(LoopHelpers.compute1(v));
 118                         else




  78         private int v = ThreadLocalRandom.current().nextInt();
  79         private volatile int result = 17;
  80         private final ReentrantLock lock = new ReentrantLock();
  81         private final LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer();
  82         private final CyclicBarrier barrier;
  83         private final int nthreads;
  84         ReentrantLockLoop(int nthreads) {
  85             this.nthreads = nthreads;
  86             barrier = new CyclicBarrier(nthreads+1, timer);
  87         }
  88 
  89         final void test() throws Exception {
  90             for (int i = 0; i < nthreads; ++i)
  91                 pool.execute(this);
  92             barrier.await();
  93             barrier.await();
  94             if (print) {
  95                 long time = timer.getTime();
  96                 long tpi = time / ((long)iters * nthreads);
  97                 System.out.print("\t" + LoopHelpers.rightJustify(tpi) + " ns per lock");
  98                 double secs = (double)time / 1000000000.0;
  99                 System.out.println("\t " + secs + "s run time");
 100             }
 101 
 102             int r = result;
 103             if (r == 0) // avoid overoptimization
 104                 System.out.println("useless result: " + r);
 105         }
 106 
 107         public final void run() {
 108             try {
 109                 barrier.await();
 110                 int sum = v;
 111                 int x = 0;
 112                 int n = iters;
 113                 do {
 114                     lock.lock();
 115                     try {
 116                         if ((n & 255) == 0)
 117                             v = x = LoopHelpers.compute2(LoopHelpers.compute1(v));
 118                         else


< prev index next >