介绍
StampedLock 有三种使用方式,分别是
- 悲观读锁:类似 ReadWriteLock 的读锁,共享锁,可多个线程获取
- 写锁:类似 ReadWriteLock 的写锁,排他锁】
- 乐观读:无锁操作,乐观读认为在读取使用共享资源的时候,不会有线程修改共享资源,使用乐观读,进行读取共享资源前,先获取 stamp,在读取使用时,判断是否有线程更改了共享资源,如果更改了,有两种处理方式,一是放弃再重新获取;二是进行锁升级,升级为悲观读锁
使用模板
package cn.zjm404.stu.thread.lock.stamped;import java.util.concurrent.locks.StampedLock;public class StampedLockDemo {private final StampedLock sl = new StampedLock();public void read(){//先进行乐观读//用于判断读取时是否有线程修改共享资源long stamp = sl.tryOptimisticRead();//进行读取操作//...if(!sl.validate(stamp)){//升级为悲观锁stamp = sl.readLock();try{//进行读操作//...}finally {//释放悲观锁sl.unlockRead(stamp);}}}public void write(){long stamp = sl.writeLock();try{//进行写//...}finally {sl.unlockWrite(stamp);}}}
