JUC中的 StampedLock

这篇博客探讨了Java 8中的StampedLock,它是ReentrantReadWriteLock的一个升级,支持乐观读锁。乐观读锁在读取时不加锁,允许写操作并行进行,从而提高性能。文章通过代码示例展示了如何使用tryOptimisticRead,并强调在读操作后使用validate检查数据一致性的重要性。总结指出,StampedLock作为不可重入锁,其乐观读锁特性使其在高读取场景下性能更优。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一篇:

JUC中的读写锁(ReentrantReadWriteLock)

之前我们了解了 ReentrantReadWriteLock,ReentrantReadWriteLock虽然在多线程的读操作中有比较好的性能,但是它有一个明显的缺点:读锁会阻塞住写锁。这样会导致当读操作非常频繁时,写锁可能会被一直阻塞,无法及时完成写入操作。

为了解决这个问题,在Java8中又引入了StampedLock

StampedLock

StampedLock 的名字源于“邮戳”(Stamp),可以理解为给锁加了一个标记或版本号。因此,StampedLock 就是一种带有标记(版本号)的锁。

StampedLock同样支持读写锁,但是比ReentrantReadWriteLock中的读锁多了一个特性是StampedLock中的读锁可以是乐观锁

乐观锁实际上是不加锁的,只是记录一下当前的版本号,不会阻塞住写锁,乐观的认为读的时候没有写的操作。所以,乐观锁在读的过程中,写锁是可以执行的。
这个特性使得 StampedLock 在读操作非常频繁而写操作较少的情况下,性能更优,因为它避免了写锁的长时间等待。

我们先来看看StampedLock中的方法

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XeonYu

码字不易,鼓励随意。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值