@Nullable
 @Override
 public V get(final K key) {
   return cacheAccess.withFileLock(
       new Factory<V>() {
         @Override
         public V create() {
           return target.get(key);
         }
       });
 }
 @Override
 public void remove(K key) {
   Runnable runnable = cacheAccess.acquireFileLock();
   target.removeLater(key, runnable);
 }
 @Override
 public void put(K key, V value) {
   Runnable runnable = cacheAccess.acquireFileLock();
   target.putLater(key, value, runnable);
 }