docs: private <T> T executeWithGlobalLock(final Job<T> job, final boolean _checkClosed) {
      synchronized (lock) {
        if (_checkClosed) { checkClosed(); }
        eviction.stop();
        try {
          T _result = hash.runTotalLocked(new Job<T>() {
            @Override
            public T call() {
              if (_checkClosed) { checkClosed(); }
              boolean f = eviction.drain();
              if (f) {
                return (T) RESTART_AFTER_EVICTION;
              }
              return eviction.runLocked(new Job<T>() {
                @Override
                public T call() {
                  return job.call();
                }
              });
            }
          });
          if (_result == RESTART_AFTER_EVICTION) {
            eviction.evictEventually();
            _result = hash.runTotalLocked(new Job<T>() {
              @Override
              public T call() {
                if (_checkClosed) { checkClosed(); }
                eviction.drain();
                return eviction.runLocked(new Job<T>() {
                  @Override
                  public T call() {
                    return job.call();
                  }
                });
              }
            });
          }
          return _result;
        } finally {
          eviction.start();
        }
      }
    }