StampedLock简单案例。
java 8对读写锁进行改进,实现读-读之间不互斥。但是仍然是悲观策略,读和写之间仍然是冲突的。StampedLock提供了一种乐观锁的读策略。使得乐观锁完全不会阻塞写线程。StampedLock内部通过自旋锁实现,并且保证锁公平,避免饥饿发生。
下面是使用示例。
public class Point {
private double x,y;
private static final StampedLock lock = new StampedLock();
void doWrite(double x,double y){
long stamp = lock.writeLock();
try {
this.x = x;
this.y = y;
} finally {
lock.unlockWrite(stamp);
}
}
double doRead() {
long stamp = lock.tryOptimisticRead();
double res = x + y;
if(!lock.validate(stamp)) {
stamp = lock.readLock();
try {
res = x + y;
} finally {
lock.unlockRead(stamp);
}
}
return res;
}
}