code: public V putIfAbsent(K key, V val) {
          //synchronized( this ) {
              V item;
              
              if( !containsKey(key) ) {
                  return put(key, val);
              }
              item = get(key);
              if( item instanceof CachedItem ) {
                  CachedItem ci = (CachedItem)item;
                  
                  if( !ci.isValidForCache() ) {
                      put(key, val);
                      return null;
                  }
              }
              return item;
          //}
      }
docs: Conditionally associates the specified value with the specified key if
  no value currently exists for the key. The actual value stored with the
  key is returned.
  @param key the key for which a value is to be stored
  @param val the proposed new value
  @return the actual value stored with key, whether the old or the new