您好,登錄后才能下訂單哦!
scala版本:2.11
在scala的并發(fā)包下存在2個(gè)類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("小李:好,立刻去接他。")// 小李自己的任務(wù)
})
xiaoZhangTask()
println("小李:逛街中。。。")
Thread.sleep(5000) // 防止線程直接退出
private def xiaoZhangTask() = {
Future {
println("小張:從北京出發(fā)了。")
Thread.sleep(2000) // 一直在路上
println("小張:已經(jīng)到上海了,該告訴小李了。")
tellMe.success("我是小張,我已經(jīng)到上海了。")
}.recover {
case _: Throwable =>
println("小張:我迷路了,該告訴小李了。")
tellMe.failure(CannotArriveException("我是小張,我找不到上海怎么辦?"))
}
}
}
case class CannotArriveException(msg: String) extends Exception(msg)
控制臺輸入如下:
小張:從北京出發(fā)了。
小李:逛街中。。。
小張:已經(jīng)到上海了,該告訴小李了。
接電話:我是小張,我已經(jīng)到上海了。
小李:好,終于可以見到他了。
map
或onComplete
或recover
等方法來處理。結(jié)論:在異步轉(zhuǎn)同步時(shí)Promise非常好用。其他情況再具體分析是否要用Promise,大部分情況直接使用Future就比較簡單。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。