¿Por qué ConcurrentHashMap? Porque es thread-safe sin bloquear todo el mapa (segmentación de locks en Java 8+, lock stripping). Si se usara HashMap, accesos concurrentes desde múltiples requests HTTP ...
El mapa interno debe ser protected final ConcurrentHashMap<ID, T> dataStore. El generador de IDs debe ser protected final AtomicLong idGenerator (iniciado en 1). save (T entity): si la entidad no ...