A.condition()B.newCondition()C.lock()D.getCondition()
A.tryOptimisticRead()B.validate()C.tryConvertToReadLockD.stamp()
A.readLock().unlock()B.writeLock().unlock()C.unlock()D.unlockWrite()