Java 8 个流来自修改后的集合

Java 8 stream from modified collection

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

你应该得到并发修改异常,因为你正在使用这个集合同时读取和写入。

这完全取决于您的源 List 实现。使用 ArrayList you may get ConcurrentModificationException (or may get corrupted data or some other exception: see the comment). With CopyOnWriteArrayList 您可以安全地使用流操作:它们将看到创建流时实际的列表状态。在任何情况下,您都应该检查相应集合的 spliterator() 方法的文档,以查看在并发环境中使用它是否安全。