Что такое обновление / понижение версии ReentrantReadWriteLock
?
Я вижу javadoc об обновлении / понижении версии:
"Блокировка перехода на более раннюю версию: Повторное вхождение также позволяет перейти от блокировки записи к блокировке чтения, установив блокировку записи, затем блокировку чтения и затем сняв блокировку записи. Однако переход с блокировки чтения на блокировку записи невозможен ».
И предоставленный образец:
class CachedData {
Object data;
volatile boolean cacheValid;
ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();
void processCachedData() {
rwl.readLock().lock();
if (!cacheValid) {
// upgrade lock manually
rwl.readLock().unlock(); // must unlock first to obtain writelock
rwl.writeLock().lock();
if (!cacheValid) { // recheck
data = ...
cacheValid = true;
}
// downgrade lock
rwl.readLock().lock(); // reacquire read without giving up write lock
rwl.writeLock().unlock(); // unlock write, still hold read
}
use(data);
rwl.readLock().unlock();
}
}
Я знаю, что там говорится о взаимосвязи между readLock и writeLock, но я не мог понять четкую концепцию из док. Не могли бы вы дать мне еще немного объяснений? Спасибо!