我有一个对象列表,会不断地被几个线程更新。在更新时,我想使用流(Stream)来过滤掉一些元素。
例如,假设我有一个经常更新的列表:
List<MyObject> myList
现在,在某个时间点上,我使用流对该列表进行操作。
List<MyObject> result =
myList.stream().filter(myobj->myobjt.isValid()).collect(toList());
如果我的列表会被多个线程同时更新,这段代码是否是线程安全的?
我有一个对象列表,会不断地被几个线程更新。在更新时,我想使用流(Stream)来过滤掉一些元素。
例如,假设我有一个经常更新的列表:
List<MyObject> myList
现在,在某个时间点上,我使用流对该列表进行操作。
List<MyObject> result =
myList.stream().filter(myobj->myobjt.isValid()).collect(toList());
如果我的列表会被多个线程同时更新,这段代码是否是线程安全的?
volatile
列表上的setArray
。因此,如果迭代器尚未到达该点,则仍可能看到修改。不是吗? - stdoutsetArray
调用最终会覆盖原始副本,这也不会干扰 COWIterator
开始迭代的那个。 - stdout