class ConcurrentCachePopulator extends AbstractCachePopulator<K, V> {

  public void pupulate() {
    final List<CacheEntry<K, V>> entries = loadEntries();
    if (entries.size() < concurrencyLevel) {
      concurrencyLevel = entries.size();
    }
    final int partition = entries.size() / concurrencyLevel;
    for (int i = 0; i < concurrencyLevel; i++) {
      final int start = i * partition;
      final int stop = i != concurrencyLevel - 1 ? (i + 1) * partition : entries.size();
      populatorExecutor.execute(() -> {
        for (int j = start; j < stop; j++) {
          cache.put(entries.get(j).getKey(), entries.get(j).getValue());
        }
      });
    }
    populatorExecutor.shutdown();
  }

  public  ConcurrentCachePopulator(final Cache<K, V> cache, final int concurrencyLevel);
  public  ConcurrentCachePopulator(Cache<K, V> cache);

}