0Pricing
Java Academy · Lesson

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 localY

All lessons in this course

  1. ReentrantLock vs synchronized
  2. ReadWriteLock for Reader-Writer Scenarios
  3. Atomic Variables: Lock-Free Updates
  4. StampedLock and Optimistic Reads
← Back to Java Academy