在具有并行性限制的惰性流上应用方法

时间:2016-05-17 07:40:29

标签: java scala

我在scala中有一个迭代器:

val collections: Iterator[Callable[Boolean]] = ...

我想对迭代器的每个元素应用一些东西,并对并发执行的数量进行约束。我在java线程池中使用了以下实现(使用了另一个SO示例):

val javaExecutor = Executors.newFixedThreadPool(numberThreads) // fixed thread pool
val scalaExecutor = JavaConversions.asExecutionContext(javaExecutor) //convert to scala executor
val futures: util.List[Future[Boolean]] = scalaExecutor.invokeAll(asJavaCollection(collections.toIterable)) // run pool, first convert Seq to java.util.Collection
// Here you have to be sure, that all task run
import ExecutionContext.Implicits.global
concurrent.Future(javaExecutor.shutdown()) // shutdown in new thread
val count = futures.map(future => Try(future.get)).count(_.isFailure)

这里的问题是,底层实现似乎是将所有可调用的内容放入队列中,以便将所有数据加载到内存中导致OutOfMemory。我正在寻找一种方法来实现懒惰,意味着在任何时候都不会在内存中同时拥有所有可调用的内容。

0 个答案:

没有答案