假设我有一个对象的List,这些对象只被一个线程修改(线程可以添加或移除对象),而另一个线程则间接地使用上面所述的流api对其进行流操作,最后(急切的操作)返回一个新的集合。这是一个线程安全的场景吗?毕竟,只有一个线程更新集合。
发布于 2015-05-18 10:35:51
这完全取决于您的源List实现。使用ArrayList,您可能会得到ConcurrentModificationException (或者可能会得到损坏的数据或其他一些异常:请参阅注释)。使用CopyOnWriteArrayList,您可以安全地使用流操作:它们将看到列表的状态,这是创建流时的实际状态。无论如何,您应该检查相应集合的spliterator()方法的文档,以确定在并发环境中使用它是否安全。
发布于 2015-05-18 10:33:46
您应该获得并发修改异常,因为您同时使用此集合进行读写。
https://stackoverflow.com/questions/30300775
复制相似问题