org.castor.util.concurrent
Interface ReadWriteLock
- ReaderPreferenceReadWriteLock, ReentrantWriterPreferenceReadWriteLock, WriterPreferenceReadWriteLock
public interface ReadWriteLock
ReadWriteLocks maintain a pair of associated locks. The readLock may be held
simultanously by multiple reader threads, so long as there are no writers.
The writeLock is exclusive. ReadWrite locks are generally preferable to plain
Sync locks or synchronized methods in cases where:
- The methods in a class can be cleanly separated into those that only
access (read) data vs those that modify (write).
- Target applications generally have more readers than writers.
- The methods are relatively time-consuming (as a rough rule of thumb,
exceed more than a hundred instructions), so it pays to introduce a bit more
overhead associated with ReadWrite locks compared to simple synchronized
methods etc in order to allow concurrency among reader threads.
Different implementation classes differ in policies surrounding which threads
to prefer when there is contention. By far, the most commonly useful policy
is WriterPreferenceReadWriteLock. The other implementations are targeted for
less common, niche applications.
Standard usage:
class X {
ReadWriteLock rw;
// ...
public void read() throws InterruptedException {
rw.readLock().acquire();
try {
// ... do the read
}
finally {
rw.readlock().release()
}
}public void write() throws InterruptedException {
rw.writeLock().acquire();
try {
// ... do the write
}
finally {
rw.writelock().release()
}
}}
readLock
public Sync readLock()
get the readLock *
writeLock
public Sync writeLock()
get the writeLock *
Intalio Inc. (C) 1999-2006. All rights reserved http://www.intalio.com