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()
方法的文档,以查看在并发环境中使用它是否安全。
假设我有 List
个对象,仅由一个线程修改(该线程可以添加或删除对象)并且另一个线程偶尔使用上述集合中的流 api 来做对它进行一些流操作,最后(急切的操作)return 一个新集合。
这是线程安全的场景吗?毕竟只有一个线程更新集合。
你应该得到并发修改异常,因为你正在使用这个集合同时读取和写入。
这完全取决于您的源 List
实现。使用 ArrayList
you may get ConcurrentModificationException
(or may get corrupted data or some other exception: see the comment). With CopyOnWriteArrayList
您可以安全地使用流操作:它们将看到创建流时实际的列表状态。在任何情况下,您都应该检查相应集合的 spliterator()
方法的文档,以查看在并发环境中使用它是否安全。