锁性能基准测试
Java Version: 17.0.5
CPU Cores: 16
测试配置: 1000000 次操作, 10 轮测试, 预热 5 轮
===== 测试: 同步实例方法 =====
线程数 1 | 耗时: 6 ms | 吞吐量: 166666666 ops/s
线程数 8 | 耗时: 87 ms | 吞吐量: 11494252 ops/s
线程数 100 | 耗时: 84 ms | 吞吐量: 11904761 ops/s
===== 测试: 同步静态方法 =====
线程数 1 | 耗时: 5 ms | 吞吐量: 200000000 ops/s
线程数 8 | 耗时: 61 ms | 吞吐量: 16393442 ops/s
线程数 100 | 耗时: 68 ms | 吞吐量: 14705882 ops/s
===== 测试: 同步代码块(this) =====
线程数 1 | 耗时: 5 ms | 吞吐量: 200000000 ops/s
线程数 8 | 耗时: 63 ms | 吞吐量: 15873015 ops/s
线程数 100 | 耗时: 79 ms | 吞吐量: 12658227 ops/s
===== 测试: 专用锁对象 =====
线程数 1 | 耗时: 5 ms | 吞吐量: 200000000 ops/s
线程数 8 | 耗时: 70 ms | 吞吐量: 14285714 ops/s
线程数 100 | 耗时: 70 ms | 吞吐量: 14285714 ops/s
===== 测试: ReentrantLock =====
线程数 1 | 耗时: 9 ms | 吞吐量: 111111111 ops/s
线程数 8 | 耗时: 14 ms | 吞吐量: 71428571 ops/s
线程数 100 | 耗时: 18 ms | 吞吐量: 55555555 ops/s
===== 测试: StampedLock(写锁) =====
线程数 1 | 耗时: 9 ms | 吞吐量: 111111111 ops/s
线程数 8 | 耗时: 12 ms | 吞吐量: 83333333 ops/s
线程数 100 | 耗时: 19 ms | 吞吐量: 52631578 ops/s
===== 测试: StampedLock(乐观读) =====
线程数 1 | 耗时: 11 ms | 吞吐量: 90909090 ops/s
线程数 8 | 耗时: 16 ms | 吞吐量: 62500000 ops/s
线程数 100 | 耗时: 19 ms | 吞吐量: 52631578 ops/s
===== 测试: 分段锁 =====
线程数 1 | 耗时: 6 ms | 吞吐量: 166666666 ops/s
线程数 8 | 耗时: 43 ms | 吞吐量: 23255813 ops/s
线程数 100 | 耗时: 40 ms | 吞吐量: 25000000 ops/s
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadLocalRandom;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReentrantLock;
import java.util.concurrent.locks.StampedLock;public class LockPerformanceBenchmark {// 测试配置private static final int TOTAL_OPERATIONS = 1_000_000;private static final int WARMUP_ROUNDS = 5;private static final int TEST_ROUNDS = 10;private static final int[] THREAD_COUNTS = {1, 8, 100}; // 无竞争/低竞争/高竞争public static void main(String[] args) throws Exception {System.out.println("Java Version: " + System.getProperty("java.version"));System.out.println("CPU Cores: " + Runtime.getRuntime().availableProcessors());System.out.println("测试配置: " + TOTAL_OPERATIONS + " 次操作, " +TEST_ROUNDS + " 轮测试, 预热 " + WARMUP_ROUNDS + " 轮");// 测试所有实现benchmark("同步实例方法", new SynchronizedMethodTest());benchmark("同步静态方法", new SynchronizedStaticTest());benchmark("同步代码块(this)", new SynchronizedBlockTest());benchmark("专用锁对象", new DedicatedLockTest());benchmark("ReentrantLock", new ReentrantLockTest());benchmark("StampedLock(写锁)", new StampedLockWriteTest());benchmark("StampedLock(乐观读)", new StampedLockOptimisticTest());benchmark("分段锁", new SegmentLockTest());System.out.println("\n测试完成!");}private static void benchmark(String name, LockTest test) throws Exception {System.out.println("\n===== 测试: " + name + " =====");// 预热for (int i = 0; i < WARMUP_ROUNDS; i++) {test.runTest(8, TOTAL_OPERATIONS/8);}// 正式测试for (int threadCount : THREAD_COUNTS) {long totalTime = 0;for (int i = 0; i < TEST_ROUNDS