Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package org.example;
- import org.openjdk.jmh.annotations.*;
- import java.util.concurrent.TimeUnit;
- import java.util.concurrent.locks.Lock;
- import java.util.concurrent.locks.ReentrantLock;
- @BenchmarkMode(Mode.AverageTime)
- @OutputTimeUnit(TimeUnit.NANOSECONDS)
- public class LockTest {
- private static final Object intrinsicLock = new Object();
- private static final Lock explicitLock = new ReentrantLock(false);
- private static int seed = 0;
- @Benchmark
- @Measurement(iterations = 3)
- @Threads(10)
- @Fork(1)
- @Warmup(iterations = 5, time = 10)
- public long testWithoutLock() {
- return doSomething(100);
- }
- @Benchmark
- @Measurement(iterations = 3)
- @Threads(10)
- @Fork(1)
- @Warmup(iterations = 5, time = 10)
- public long testReentrantLock() {
- explicitLock.lock();
- try {
- return doSomething(100);
- } finally {
- explicitLock.unlock();
- }
- }
- @Benchmark
- @Measurement(iterations = 3)
- @Threads(10)
- @Fork(1)
- @Warmup(iterations = 5, time = 10)
- public long testSynchronized() {
- synchronized (intrinsicLock) {
- return doSomething(100);
- }
- }
- static int calculateNext(int y) {
- y ^= (y << 6);
- y ^= (y >>> 21);
- y ^= (y << 7);
- return y;
- }
- private long doSomething(int n) {
- int s = seed;
- seed = calculateNext(s);
- int remainder = s % n;
- return remainder > 0 ? remainder : remainder + n;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement