【发布时间】:2015-02-11 02:10:58
【问题描述】:
考虑一个函数的 for 循环,该函数接受一个 ArrayList 引用并将一个对象添加到该 ArrayList。我现在想并行执行每个函数调用。
如果我不关心添加对象的顺序并且没有函数读取或操作任何 ArrayList 元素,那么 ArrayList.add() 方法是否线程安全? 所以我只想确保在并行调用结束时所有对象都被添加到列表中。
【问题讨论】:
-
试试
Collections.synchronizedList(new ArrayList<Object>()) -
那你不是在找包吗?它可以包含多个,但顺序无关紧要。我不认为 Java 提供了标准实现,但它可能会在以后的搜索中帮助您。
-
OP 实际需要的是每个线程单独累积其贡献,然后合并来自所有线程的结果。也就是说,他需要
Stream.parallel()。 -
就在the documentation 中:"注意这个实现是不同步的。 如果多个线程同时访问
ArrayList实例,并且至少有一个线程修改从结构上看,列表必须在外部同步。” 不是我的重点,粗体和斜体实际上在文档中。文档是您获取信息的第一站。
标签: java multithreading arraylist thread-safety