StampedLock性能优化:比读写锁更快的乐观读锁
一、ReadWriteLock的性能瓶颈 1.1 读写锁的问题 // ReadWriteLock:读多写少场景的优化 ReadWriteLock rwLock = new ReentrantReadWriteLock(); // 读操作 rwLock.readLock().lock(); try { // 读取数据 return data; } finally { rwLock.readLock().unlock(); } // 写操作 rwLock.writeLock().lock(); try { // 修改数据 data = newData; } finally { rwLock.writeLock().unlock(); } 性能瓶颈: 读锁也是锁:虽然允许多个读线程并发,但获取/释放锁仍有开销 CAS竞争:多个读线程获取读锁时,仍需CAS操作state变量 写锁饥饿:大量读操作时,写操作可能长时间等待 1.2 StampedLock的突破 StampedLock sl = new StampedLock(); // 乐观读(无锁) long stamp = sl.tryOptimisticRead(); // 获取戳记(无锁) int value = data; // 读取数据 if (sl.validate(stamp)) { // 验证戳记是否有效 return value; // 有效,直接返回 } // 无效:升级为悲观读锁 stamp = sl.readLock(); try { return data; } finally { sl.unlockRead(stamp); } 核心优势: ...