Advertisement
Guest User

Untitled

a guest
Sep 17th, 2023
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.42 KB | None | 0 0
  1. package org.example;
  2.  
  3. import org.openjdk.jmh.annotations.*;
  4.  
  5. import java.util.concurrent.TimeUnit;
  6. import java.util.concurrent.locks.Lock;
  7. import java.util.concurrent.locks.ReentrantLock;
  8.  
  9. @BenchmarkMode(Mode.AverageTime)
  10. @OutputTimeUnit(TimeUnit.NANOSECONDS)
  11. public class LockTest {
  12.  
  13.   private static final Object intrinsicLock = new Object();
  14.   private static final Lock explicitLock = new ReentrantLock(false);
  15.   private static int seed = 0;
  16.  
  17.   @Benchmark
  18.   @Measurement(iterations = 3)
  19.   @Threads(10)
  20.   @Fork(1)
  21.   @Warmup(iterations = 5, time = 10)
  22.   public long testWithoutLock() {
  23.     return doSomething(100);
  24.   }
  25.  
  26.   @Benchmark
  27.   @Measurement(iterations = 3)
  28.   @Threads(10)
  29.   @Fork(1)
  30.   @Warmup(iterations = 5, time = 10)
  31.   public long testReentrantLock() {
  32.     explicitLock.lock();
  33.     try {
  34.       return doSomething(100);
  35.     } finally {
  36.       explicitLock.unlock();
  37.     }
  38.   }
  39.  
  40.   @Benchmark
  41.   @Measurement(iterations = 3)
  42.   @Threads(10)
  43.   @Fork(1)
  44.   @Warmup(iterations = 5, time = 10)
  45.   public long testSynchronized() {
  46.     synchronized (intrinsicLock) {
  47.       return doSomething(100);
  48.     }
  49.   }
  50.  
  51.   static int calculateNext(int y) {
  52.     y ^= (y << 6);
  53.     y ^= (y >>> 21);
  54.     y ^= (y << 7);
  55.     return y;
  56.   }
  57.  
  58.   private long doSomething(int n) {
  59.     int s = seed;
  60.     seed = calculateNext(s);
  61.     int remainder = s % n;
  62.     return remainder > 0 ? remainder : remainder + n;
  63.   }
  64. }
  65.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement