code: @SuppressWarnings("PMD.AvoidCatchingNPE")
    private Map<K, V> getAll(Set<? extends K> keys, boolean updateAccessTime) {
      requireNotClosed();
      boolean statsEnabled = statistics.isEnabled();
      long start = statsEnabled ? ticker.read() : 0L;
      try {
        Map<K, Expirable<V>> entries = getAndFilterExpiredEntries(keys, updateAccessTime);
  
        if (entries.size() != keys.size()) {
          List<K> keysToLoad = keys.stream()
              .filter(key -> !entries.containsKey(key))
              .collect(Collectors.<K>toList());
          entries.putAll(cache.getAll(keysToLoad));
        }
  
        Map<K, V> result = copyMap(entries);
        if (statsEnabled) {
          statistics.recordGetTime(ticker.read() - start);
        }
        return result;
      } catch (NullPointerException | IllegalStateException | ClassCastException | CacheException e) {
        throw e;
      } catch (RuntimeException e) {
        throw new CacheException(e);
      } finally {
        dispatcher.awaitSynchronous();
      }
    }
docs: Returns the entries, loading if necessary, and optionally updates their access expiry time.