< prev index next >

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

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


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


  77         private int v = ThreadLocalRandom.current().nextInt();
  78         private volatile int result = 17;
  79         final ReentrantLock[]locks = new ReentrantLock[nlocks];
  80 
  81         private final ReentrantLock lock = new ReentrantLock();
  82         private final LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer();
  83         private final CyclicBarrier barrier;
  84         ReentrantLockLoop() {
  85             barrier = new CyclicBarrier(nthreads+1, timer);
  86             for (int i = 0; i < nlocks; ++i)
  87                 locks[i] = new ReentrantLock();
  88         }
  89 
  90         final void test() throws Exception {
  91             for (int i = 0; i < nthreads; ++i)
  92                 pool.execute(this);
  93             barrier.await();
  94             barrier.await();
  95             if (print) {
  96                 long time = timer.getTime();
  97                 double secs = (double)time / 1000000000.0;
  98                 System.out.println("\t " + secs + "s run time");
  99             }
 100 
 101             int r = result;
 102             if (r == 0) // avoid overoptimization
 103                 System.out.println("useless result: " + r);
 104         }
 105 
 106         public final void run() {
 107             try {
 108                 barrier.await();
 109                 int sum = v;
 110                 int x = 0;
 111                 for (int i = 0; i < locks.length; ++i) {
 112                     locks[i].lock();
 113                     try {
 114                         v = x += ~(v - i);
 115                     }
 116                     finally {
 117                         locks[i].unlock();
< prev index next >