我創建一個列表並使用並行流從其他列表中填充它,意外的是目標列表包含空值。它很少發生,不穩定。有人有同樣的問題嗎?由並行流填充的ArrayList包含空值
下面是一段代碼:
Collection<DestinationObj> DestinationObjList = Lists.newArrayList();
SourceObjList.parallelStream().forEach(portalRule -> DestinationObjList.add(new DestinationObj(portalRule)));
return DestinationObjList;
你'ArrayList'不是線程安全的。 – Flown
https://docs.oracle.com/javase/tutorial/collections/streams/parallelism.html請參閱頁面末尾;) – 2017-04-05 11:55:38
順便說一句,您應該使用'.collect(...)'而不是執行' .forEach'。我懷疑它可能適用於並行流,即使沒有線程安全列表(因爲收集器將處理同步),但是您必須驗證它。 –