来自修改集合的Java 8流

时间:2015-05-18 10:27:29

标签: java multithreading java-8 java-stream

假设我有一个List个对象只被一个线程修改(线程可以添加或删除对象),而另一个线程偶尔会使用上面集合中的流api来对它进行一些流操作最后(急切的操作)返回一个新的集合。 这是一个线程安全的场景吗?毕竟只有一个线程更新了集合。

2 个答案:

答案 0 :(得分:6)

这完全取决于您的源List实施。使用ArrayList,您可能获取ConcurrentModificationException(或者可能会损坏数据或其他一些例外:请参阅评论)。使用CopyOnWriteArrayList,您可以安全地使用流操作:它们将在创建流时看到列表的状态。在任何情况下,您都应该检查相应集合的spliterator()方法的文档,以确定在并发环境中使用它是否安全。

答案 1 :(得分:0)

您应该获得并发修改异常,因为您正在使用此集合同时进行读写。