use*_*534 6 java java-8 java-stream
我有一些List对象正在从几个线程中定期更新.在更新时,我想使用流来过滤掉一些元素.
例如; 说我有定期更新的列表:
List<MyObject> myList
Run Code Online (Sandbox Code Playgroud)
现在在某个时间点我在该列表上使用流
List<MyObject> result =
myList.stream().filter(myobj->myobjt.isValid()).collect(toList());
Run Code Online (Sandbox Code Playgroud)
鉴于我的列表是从几个线程更新的,这是否是线程安全的?
CopyOnWriteArrayList的Javadoc声明如下:
"快照"样式迭代器方法在创建迭代器时使用对数组状态的引用.这个数组在迭代器的生命周期中永远不会改变,所以干扰是不可能的,并且保证迭代器不会抛出ConcurrentModificationException.自迭代器创建以来,迭代器不会反映列表的添加,删除或更改.
所以,是的,您的代码应该是线程安全的.该流将在启动后忽略列表中的所有添加项.
| 归档时间: |
|
| 查看次数: |
495 次 |
| 最近记录: |