jdk8加入的,为了进一步优化读性能。比ReentrantReadWriteLock性能好。但是却无法完全替代。
特点:在使用读锁、写锁时都必须配合戳使用。
优化的点在于乐观读,乐观读没有加任何的锁。
乐观读,StampedLock支持tryOptimisticRead()方法(乐观读),读取完毕后需要做一次戳校验,如果校验通过,表示这期间确实没有写操作,数据可以安全使用,如果校验没有通过,需要重新获取读锁,保证数据安全。
@Slf4j
public class DataContainerStamped {private int data;private final StampedLock lock = new StampedLock();public DataContainerStamped(int data) {this.data = data;}public int read(int readTime) {//乐观读获取戳long stamp = lock.tryOptimisticRead();log.debug("optimistic read locking.... {}", stamp);try {Thread.sleep(readTime);} catch (InterruptedException e) {e.printStackTrace();}//在读操作期间,没有写线程对这个戳进行影响