我需要将每一行从一个大文件发送到Java,Iterator,Iterable。从这个集合、迭代器等,一个现有的框架将数据加载到一个处理系统中。但是,需要向这个框架发送一个并发集合、迭代器等,这是我面临的困难。
我有一个java.util.stream,这是我从一个大文件中得到的。文件中有许多行,我想将所有行传递到一个java 并发java.lang.Iterable或Concurrent java.util.Iterator或不将所有记录存储在内存中的Concurrent java.util.Collection中,这样我就不会得到像OutOfMemory之类的异常。
。任何关于如何使用或不使用Stream的并发实现的想法都将受到极大的赞赏。
发布于 2017-01-12 19:17:16
不存在“并发迭代者”这样的东西。
虽然存在并发集合,但是为它们创建的Iterator是弱一致的(它描述了它们关于底层Collection更新的行为),并且一个Iterator实例一次只能由一个线程使用。
由于来自通过Iterator创建的Stream的Collection没有可以更新的底层Collection,并且不支持remove()操作,所以它不能表现出任何与为并发集合创建的Iterator的行为相矛盾的行为,这显然是框架所期望的。嗯,除了它不支持remove操作之外,我觉得这不是您想要的操作的问题。
因此,如果框架为您提供了将Iterator传递给它的选项,则可以使用它传递通过Stream.iterator()创建的Iterator。只要Stream没有任何一个有状态的中间操作( sort或distinct ),它就会表现出想要的懒惰行为。
最值得注意的是,它永远不会抛出一个ConcurrentModificationException。
https://stackoverflow.com/questions/41611422
复制相似问题