scala的Promise和Future的理解
阿新 • • 發佈:2018-11-19
and 處理 read cit 未來 current Language 原因 ase scala版本:2.11
在scala的並發包下存在2個類Promise和Future。用起來很簡單。例子如下:
在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字面意思為“未來”,表示未來發生的結果,這個結果可關心可不關心。如果關心可使用
map
或onComplete
或recover
等方法來處理。
結論:在異步轉同步時Promise非常好用。其他情況再具體分析是否要用Promise,大部分情況直接使用Future就比較簡單。
scala的Promise和Future的理解