Utilice el método foreach paralelo para crear HashMap, pero a veces el valor está vacío

Código Java como:

List<Detail> DbDetails = ... Like 50000 rows records
Map<Long, List<Detail>> details = new HashMap();

DbDetails .parallelStream().forEach(detail -> {
        Long id = detail.getId();
        details.computeIfAbsent(id, v -> new ArrayList<>()).add(detail);

    });

Then ...

details.entrySet().stream().forEach(e -> {
        e.getValue(); // Some value is empty
    });

Supongo que porque HashMap no es seguro para subprocesos, por lo que uso Hashtable en lugar de él. Luego funciona bien, todo el valor tiene valor, pero no sé por qué.

Respuestas a la pregunta(1)

Su respuesta a la pregunta