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

可以参考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);
* }
网友评论