溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

scala的Promise和Future的理解

發布時間:2020-06-22 10:24:38 來源:網絡 閱讀:1417 作者:53422245 欄目:開發技術

scala版本:2.11
在scala的并發包下存在2個類Promise和Future。用起來很簡單。例子如下:

import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.{Future, Promise}

object PromiseAndFuture extends App {

  // 小李:等你到上海了,打電話告訴我
  val tellMe = Promise[String]()

  val result = tellMe.future
  result.recover {
    case CannotArriveException(msg) => msg
  }.foreach(msg => {
    println(s"接電話:$msg")
    println("小李:好,立刻去接他。")// 小李自己的任務
  })

  xiaoZhangTask()

  println("小李:逛街中。。。")
  Thread.sleep(5000) // 防止線程直接退出

  private def xiaoZhangTask() = {
    Future {
      println("小張:從北京出發了。")
      Thread.sleep(2000) // 一直在路上
      println("小張:已經到上海了,該告訴小李了。")
      tellMe.success("我是小張,我已經到上海了。")
    }.recover {
      case _: Throwable =>
        println("小張:我迷路了,該告訴小李了。")
        tellMe.failure(CannotArriveException("我是小張,我找不到上海怎么辦?"))
    }
  }
}

case class CannotArriveException(msg: String) extends Exception(msg)

控制臺輸入如下:

小張:從北京出發了。
小李:逛街中。。。
小張:已經到上海了,該告訴小李了。
接電話:我是小張,我已經到上海了。
小李:好,終于可以見到他了。
  • Promise字面意思為“許可”,當你向讓另外一個人(另外一個線程)去做某件事,并且需要該事情的結果,你需要先“許可”對方可以告訴你的結果(成功/失敗,成功是什么或者失敗的原因是什么)。
  • Future字面意思為“未來”,表示未來發生的結果,這個結果可關心可不關心。如果關心可使用maponCompleterecover等方法來處理。

結論:在異步轉同步時Promise非常好用。其他情況再具體分析是否要用Promise,大部分情況直接使用Future就比較簡單。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女