假设我有一个List
个对象只被一个线程修改(线程可以添加或删除对象),而另一个线程偶尔会使用上面集合中的流api来对它进行一些流操作最后(急切的操作)返回一个新的集合。
这是一个线程安全的场景吗?毕竟只有一个线程更新了集合。
答案 0 :(得分:6)
这完全取决于您的源List
实施。使用ArrayList
,您可能获取ConcurrentModificationException
(或者可能会损坏数据或其他一些例外:请参阅评论)。使用CopyOnWriteArrayList
,您可以安全地使用流操作:它们将在创建流时看到列表的状态。在任何情况下,您都应该检查相应集合的spliterator()
方法的文档,以确定在并发环境中使用它是否安全。
答案 1 :(得分:0)
您应该获得并发修改异常,因为您正在使用此集合同时进行读写。