加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 为什么Future.sequence并行执行我的期货而不是串行?

发布时间:2020-12-16 09:17:11 所属栏目:安全 来源:网络整理
导读:“序列”一词是指一连串的动作. object Test { def main(args: Array[String]) { def producer() = { val list = Seq( future { println("startFirst"); Thread.sleep(3000); println("stopFirst") },future { println("startSecond"); Thread.sleep(1000);
“序列”一词是指一连串的动作.

object Test {

  def main(args: Array[String]) {

    def producer() = {
      val list = Seq(
          future { println("startFirst"); Thread.sleep(3000); println("stopFirst") },future { println("startSecond"); Thread.sleep(1000); println("stopSecond") }
      )
      Future.sequence(list)
    }

   Await.result(producer,Duration.Inf)
  }
}

所以我期望这个程序打印出来:

startFirst
stopFirst
startSecond
stopSecond

甚至:

startSecond
stopSecond
startFirst
stopFirst

但不是(发生):

startFirst
startSecond
stopSecond
stopFirst

为什么这个方法不叫Future.parallel()?
我应该用什么来保证期货期货的所有期货都是顺序触发的(而不是并行的)?

解决方法

期货同时运行,因为它们已经同时开始:).
要依次运行它们,您需要使用flatMap:

Future { println("startFirst"); 
         Thread.sleep(3000); 
         println("stopFirst") 
        }.flatMap{
         _ =>  Future { 
                       println("startSecond"); 
                       Thread.sleep(1000); 
                       println("stopSecond") 
               }
        }

Future.sequence只是转过Seq [Future [T]] =>未来[Seq [T]]这意味着收集所有已经开始的期货的结果,并将来放弃.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读