code: public V get(K key) {
  		V value = null;
  		long stamp = lock.tryOptimisticRead();
  		if (stamp != 0) {
  			try {
  				value = map.get(key);
  			} catch (Exception modified) {
  				stamp = 0;
  			}
  		}
  		if (!lock.validate(stamp) || stamp == 0) {
  			stamp = lock.readLock();
  			try {
  				value = map.get(key);
  			} finally {
  				lock.unlockRead(stamp);
  			}
  		}
  		return value;
  	}
docs: --- GET / PUT / ETC ---