0
的Java代碼如下:使用parallelStream的foreach創建的HashMap,但有時值爲空
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
});
我想這是因爲HashMap的是線程安全的,所以我用,而不是它的Hashtable。然後它運行正常,所有的價值都有價值,但我不知道爲什麼?
'HashMap'的javadoc(https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html)是這個很清楚,「注意,此實現不如果多個線程同時訪問哈希映射,並且至少有一個線程在結構上修改了映射,那麼它必須在外部進行同步。 – Misha