StampedLock
StampedLock使用必须遵循的模式
private final StampedLock sl = new StampedLock();
long stamp = sl.tryOptimisticRead(); // 非阻塞获取版本信息 使用乐观锁
copyVaraibale2ThreadMemory(); // 拷贝变量到线程本地堆栈
if(!lock.validate(stamp)){ // 校验
long stamp = lock.readLock(); // 获取读锁
try {
copyVaraibale2ThreadMemory(); // 拷贝变量到线程本地堆栈
} finally {
lock.unlock(stamp); // 释放悲观锁
}
}
useThreadMemoryVarables(); // 使用线程本地堆栈里面的数据进行操作