StampedLock 读模板:
final StampedLock sl = new StampedLock();
// 乐观读 long stamp = sl.tryOptimisticRead();
// 读⼊⽅法局部变量 ......
// 校验 stamp
if (!sl.validate(stamp)){
// 升级为悲观读锁
stamp = sl.readLock();
try {
// 读⼊⽅法局部变量 .....
} finally {
// 释放悲观读锁
sl.unlockRead(stamp);
}
}
// 使⽤⽅法局部变量执⾏业务操作 ......
StampedLock 写模板:
long stamp = sl.writeLock();
try {
// 写共享变量 ......
} finally {
sl.unlockWrite(stamp);
}