异步非阻塞方式
1. 获取返回的所有情况
import scala.concurrent.{Await, Future}
import scala.concurrent.ExecutionContext.Implicits.global
import scala.util.{Failure, Success}
import scala.concurrent.duration._
object Test {
def main(args: Array[String]): Unit = {
val future = Future {
Thread.sleep(1000)
Map("status" -> "ok")
}
future.onComplete{
//返回成功的情况
case Success(s) => println(s.get("status").get)
//返回失败的情况
case Failure(e) => println(e.getMessage)
}
}
}
运行程序发现没有输出,因为future异步处理,没有运行完成程序就结束了。在future.onComplete前Thread.sleep(1000)后就可以输出结果了。
2.只获取部分返回结果
可以单独只获取成功、失败的返回值
import scala.concurrent.{Await, Future}
import scala.concurrent.ExecutionContext.Implicits.global
import scala.util.{Failure, Success}
import scala.concurrent.duration._
object Test {
def main(args: Array[String]): Unit = {
val future = Future {
Thread.sleep(1000)
Map("status" -> "ok")
}
//只处理了future线程返回成功的情况
future onSuccess {
case x => println(x)
}
//只处理了future线程返回失败的情况
future onFailure {
case x => println(x)
}
}
}
同步阻塞方式
import scala.concurrent.{Await, Future}
import scala.concurrent.ExecutionContext.Implicits.global
import scala.util.{Failure, Success}
import scala.concurrent.duration._
object Test {
def main(args: Array[String]): Unit = {
val future = Future {
Thread.sleep(1000)
Map("status" -> "ok")
}
//同步阻塞的方式获取Future结果
val result = Await.result(future,3 seconds)
println(result)
}
}