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)
控制臺輸入如下:
小張:從北京出發了。
小李:逛街中。。。
小張:已經到上海了,該告訴小李了。
接電話:我是小張,我已經到上海了。
小李:好,終于可以見到他了。
map
或onComplete
或recover
等方法來處理。結論:在異步轉同步時Promise非常好用。其他情況再具體分析是否要用Promise,大部分情況直接使用Future就比較簡單。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。