StampedLock and Optimistic Reads
Apply StampedLock's optimistic read mode for high-throughput, read-dominant workloads.
What is StampedLock?
Introduced in Java 8, StampedLock extends ReadWriteLock concepts with an additional optimistic read mode. Operations return a long stamp used to release the lock or validate the optimistic read.
import java.util.concurrent.locks.*;
StampedLock sl = new StampedLock();
// Exclusive write:
long stamp = sl.writeLock();
try {
// write data
} finally {
sl.unlockWrite(stamp);
}
// Shared read:
stamp = sl.readLock();
try {
// read data
} finally {
sl.unlockRead(stamp);
}Optimistic Read Mode
Optimistic read acquires no lock — it just gets a stamp. After reading, validate the stamp. If validation fails (a writer intervened), fall back to a real read lock:
StampedLock sl2 = new StampedLock();
double x = 0, y = 0;
// Try optimistic read first:
long stamp = sl2.tryOptimisticRead();
double localX = x, localY = y; // read values
if (!sl2.validate(stamp)) {
// A write occurred — fall back to read lock
stamp = sl2.readLock();
try {
localX = x;
localY = y;
} finally {
sl2.unlockRead(stamp);
}
}
// use localX and localYAll lessons in this course
- ReentrantLock vs synchronized
- ReadWriteLock for Reader-Writer Scenarios
- Atomic Variables: Lock-Free Updates
- StampedLock and Optimistic Reads