美文网首页
Java 的 StampedLock

Java 的 StampedLock

作者: NazgulSun | 来源:发表于2021-12-15 17:16 被阅读0次

没有使用AQS框架,1.8引入的更高性能的读写锁实现;

image.png
可以参考https://zhuanlan.zhihu.com/p/379827927

整体的思想就是 一个 long state, bit 分段, 然后代表读写的状态;
其中 1-7位读锁,8位写锁; 高位时 stamped 标识;
核心思想是 版本控制,维持递增,防止ABA问题。 读写 可以不互斥,但是 读的时候需要判断 stamped 版本是否有效,官方的例子

 *   double distanceFromOrigin() { // A read-only method
 *     long stamp = sl.tryOptimisticRead();
 *     double currentX = x, currentY = y;
 *     if (!sl.validate(stamp)) {
 *        stamp = sl.readLock();
 *        try {
 *          currentX = x;
 *          currentY = y;
 *        } finally {
 *           sl.unlockRead(stamp);
 *        }
 *     }
 *     return Math.sqrt(currentX * currentX + currentY * currentY);
 *   }

相关文章

网友评论

      本文标题:Java 的 StampedLock

      本文链接:https://www.haomeiwen.com/subject/cxepfrtx.html