我创建一个列表并使用并行流从其他列表中填充它,意外的是目标列表包含空值。它很少发生,不稳定。有人有同样的问题吗?由并行流填充的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'。我怀疑它可能适用于并行流,即使没有线程安全列表(因为收集器将处理同步),但是您必须验证它。 –