code: public void setCacheConfig(final Cache2kConfiguration c) {
      valueType = c.getValueType();
      keyType = c.getKeyType();
      if (name != null) {
        throw new IllegalStateException("already configured");
      }
      setName(c.getName());
      setFeatureBit(KEEP_AFTER_EXPIRED, c.isKeepDataAfterExpired());
      setFeatureBit(REJECT_NULL_VALUES, !c.isPermitNullValues());
      setFeatureBit(BACKGROUND_REFRESH, c.isRefreshAhead());
      setFeatureBit(UPDATE_TIME_NEEDED, c.isRecordRefreshedTime());
      setFeatureBit(RECORD_REFRESH_TIME, c.isRecordRefreshedTime());
  
      metrics = TUNABLE.commonMetricsFactory.create(new CommonMetricsFactory.Parameters() {
        @Override
        public boolean isDisabled() {
          return c.isDisableStatistics();
        }
  
        @Override
        public boolean isPrecise() {
          return false;
        }
      });
  
      if (c.getLoaderExecutor() != null) {
        loaderExecutor = createCustomization((CustomizationSupplier<Executor>) c.getLoaderExecutor());
      } else {
        if (c.getLoaderThreadCount() > 0) {
          loaderExecutor = provideDefaultLoaderExecutor(c.getLoaderThreadCount());
        }
      }
      if (c.getPrefetchExecutor() != null) {
        prefetchExecutor = createCustomization((CustomizationSupplier<Executor>) c.getPrefetchExecutor());
      }
    }
docs: called from CacheBuilder