Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala并发执行期货列表_Scala_Concurrency_Future - Fatal编程技术网

Scala并发执行期货列表

Scala并发执行期货列表,scala,concurrency,future,Scala,Concurrency,Future,我是斯卡拉的新手。它有助于减少代码并提供函数式语言的元素来处理数据。然而,我很难找到一种并行执行lst期货的方法。我的列表的类型为list[Future[String]]。如何使此列表并行执行 val futures=(data.map { x => this.breakString(x) }).toList 未来的定义是: def breakString(inX:Object):Future[String]=Future { //get new jsonObject v

我是斯卡拉的新手。它有助于减少代码并提供函数式语言的元素来处理数据。然而,我很难找到一种并行执行lst期货的方法。我的列表的类型为list[Future[String]]。如何使此列表并行执行

val futures=(data.map { x => this.breakString(x) }).toList
未来的定义是:

def breakString(inX:Object):Future[String]=Future {
    //get new jsonObject
    val x =inX.asInstanceOf[String]
    val jmap=JacksMapper.readValue[Map[String,AnyRef]](x)
    val dataArr:Array[String]=jmap.get(this.rowcolumn).asInstanceOf[String].split(token)
    val map=dataArr.map { x => (positions.get(dataArr.indexOf(x).asInstanceOf[String]),x) }.toMap
    map.put(hashKey, jmap.get(hashKey).asInstanceOf[String])

    //write out positions
    JacksMapper.writeValueAsString(map)
  }
你可以用

引用Scala文档:

这对于执行并行映射非常有用。例如,将函数并行应用于列表的所有项

你可以用

引用Scala文档:

这对于执行并行映射非常有用。例如,将函数并行应用于列表的所有项


期货将在有可用线程运行时立即开始执行。假设您有一个包含多个线程的执行上下文,这意味着它们将自动并行执行

您可以使用Scala REPL演示这一点:

scala> import scala.concurrent.Future
import scala.concurrent.Future

scala> import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.ExecutionContext.Implicits.global

scala> def makeFuture(ms: Int, msg: String): Future[Unit] = Future { Thread.sleep(ms); println(msg) }
makeFuture: (ms: Int, msg: String)scala.concurrent.Future[Unit]

scala> makeFuture(1000, "a"); makeFuture(500, "b")
res2: scala.concurrent.Future[Unit] = scala.concurrent.impl.Promise$DefaultPromise@2819f703

scala> b
a

期货将在有可用线程运行时立即开始执行。假设您有一个包含多个线程的执行上下文,这意味着它们将自动并行执行

您可以使用Scala REPL演示这一点:

scala> import scala.concurrent.Future
import scala.concurrent.Future

scala> import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.ExecutionContext.Implicits.global

scala> def makeFuture(ms: Int, msg: String): Future[Unit] = Future { Thread.sleep(ms); println(msg) }
makeFuture: (ms: Int, msg: String)scala.concurrent.Future[Unit]

scala> makeFuture(1000, "a"); makeFuture(500, "b")
res2: scala.concurrent.Future[Unit] = scala.concurrent.impl.Promise$DefaultPromise@2819f703

scala> b
a

这看起来有点古怪,但它是并行执行的,因为traverse看起来是按顺序执行的吗?这看起来有点古怪,但它是并行执行的,因为traverse看起来是按顺序执行的吗?