Java 非阻塞、可完成的基于未来的迭代器

Java 非阻塞、可完成的基于未来的迭代器,java,nonblocking,Java,Nonblocking,我想使用迭代器从数据提取本身抽象出一个数据处理算法。比如,与其执行dataSource.getNextObject(),不如请求一个标准的java.util.Iterator作为输入,并使用它。然而,JDK的迭代器是阻塞的。使用Couchbase或Mongo作为数据源,这些数据源具有基于回调的非阻塞客户机库,阻塞迭代器无法实现这一目的。JDK没有非阻塞的 我一直在考虑用hasNext()和next()返回相应的CompletableFutures来做java.util.Iterator的封面 我

我想使用迭代器从数据提取本身抽象出一个数据处理算法。比如,与其执行
dataSource.getNextObject()
,不如请求一个标准的java.util.Iterator作为输入,并使用它。然而,JDK的迭代器是阻塞的。使用Couchbase或Mongo作为数据源,这些数据源具有基于回调的非阻塞客户机库,阻塞迭代器无法实现这一目的。JDK没有非阻塞的

我一直在考虑用
hasNext()
next()
返回相应的
CompletableFuture
s来做
java.util.Iterator
的封面

我在谷歌上找不到关于这个话题的任何东西。为什么?这个想法太疯狂了,我做错什么了吗

问题是:如果项目中不允许阻塞代码,并且next/hasNext操作可能会阻塞相当长的时间,那么如何使用迭代器呢


Upd:
CompletableFuture
上迭代将不起作用,因为它不包括
hasNext()
,并且
hasNext()
可能需要实际执行阻塞操作。

对于尚未完成的未来,您将如何处理?为什么你认为迭代器对于你想做的任何事情都是正确的工具?
不是比
迭代器
更好、功能更丰富吗?对于Java 7及以下版本,可以与Guava的函数式习惯用法一起使用(懒散地)转换数据源并将数据处理算法封装为
函数
。对于并发性,还有一个特殊的Futures API,名为。@realpoint Futures,它没有完成超时(通过一个高效的HashedWheelTimer)。当你需要对数据进行迭代时,迭代器是一个正确的工具,这是很自然想到的。@Max Number of threads不应该是应用程序内部发生的任何事情的函数。如果一切都是非阻塞的,那么您不需要产生比本地线程更多的线程(核心+超线程)。