在执行流操作java 8时更新集合

时间:2015-05-14 05:00:39

标签: java java-8 java-stream

我有一个List个对象正在从几个线程中定期更新。在更新时,我想使用流来过滤掉一些元素。

例如;说我有定期更新的清单:

List<MyObject> myList

现在在某个时间点我在该列表上使用流

List<MyObject> result =  
myList.stream().filter(myobj->myobjt.isValid()).collect(toList());

鉴于我的列表是从几个线程更新的,这是否是线程安全的?

1 个答案:

答案 0 :(得分:7)

Javadoc of CopyOnWriteArrayList声明如下:

  

“snapshot”样式迭代器方法在创建迭代器时使用对数组状态的引用。这个数组在迭代器的生命周期中永远不会改变,所以干扰是不可能的,并且保证迭代器不会抛出ConcurrentModificationException。自迭代器创建以来,迭代器不会反映列表的添加,删除或更改。

所以,是的,你的代码应该是线程安全的。该流将在启动后忽略列表中的所有添加内容。