import util._
import concurrent.ExecutionContext.Implicits.global
import concurrent.Future
import concurrent.duration._ object CollectionDemo9 {
def main(args: Array[String]): Unit = {
//Try捕捉异常
println(Try(10 / 0))
println(Try(10).flatMap { x => Try(x + "abc") })
println(Try(10 / 0).flatMap { x => Try(x + "abc") })
//会丢Exception
println(Try(10).toOption)
println(Try(10).map { x => x + 2 })
println(Try(10 / 0) match {
case Success(x) => x
case Failure(error) => -1
})
//Future使用, 异步5秒后会打印hi
Future { Thread.sleep(3000); println("hi") }
println("waiting")
Thread.sleep(5000) //异步执行Future, 并用回调函数获得结果
def sayHello(s: String): String = {
Thread.sleep(3000)
s + " call Future"
}
val futureCaller = Future sequence Seq(Future(sayHello("sky")), Future(sayHello("bill")))
futureCaller onSuccess {
case Seq(x, y) => println(x + "," + y)
}
println("waiting again")
Thread.sleep(5000) //同步调用Future, 如果在指定时间异步调用返回结果,则返回结果。
val maxTime = Duration(10, SECONDS)
println(concurrent.Await.result(Future(sayHello("sky")), maxTime))
//同步调用Future, 如果在指定时间异步调用没有返回结果,则抛出异常。
val maxTime1 = Duration(2, SECONDS)
println(concurrent.Await.result(Future(sayHello("sky")), maxTime1)) }
}

运行结果:

Failure(java.lang.ArithmeticException: / by zero)
Success(10abc)
Failure(java.lang.ArithmeticException: / by zero)
Some(10)
Success(12)
-1
waiting
hi
waiting again
sky call Future,bill call Future
sky call Future
Exception in thread "main" java.util.concurrent.TimeoutException: Futures timed out after [2 seconds]
at scala.concurrent.impl.Promise$DefaultPromise.ready(Promise.scala:219)
at scala.concurrent.impl.Promise$DefaultPromise.result(Promise.scala:223)
at scala.concurrent.Await$$anonfun$result$1.apply(package.scala:107)
at scala.concurrent.BlockContext$DefaultBlockContext$.blockOn(BlockContext.scala:53)
at scala.concurrent.Await$.result(package.scala:107)
at com.citi.scala.CollectionDemo9$.main(CollectionDemo9.scala:43)
at com.citi.scala.CollectionDemo9.main(CollectionDemo9.scala)

Scala 学习笔记之集合(8) Try和Future的更多相关文章

  1. Scala 学习笔记之集合(3)

    建立一个Java类,为了演示Java集合类型向Scala集合的转换: import java.util.ArrayList; import java.util.List; public class S ...

  2. scala学习笔记:集合

    scala> 1 to 10 res9: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9 ...

  3. Scala 学习笔记之集合(1)

    package com.citi.scala object CollectionDemo { def main(args: Array[String]): Unit = { /** * List */ ...

  4. Scala 学习笔记之集合(7) Option

    object CollectionDemo8 { def main(args: Array[String]): Unit = { //Option集合的使用,可以用来安全的判断null或非null,放 ...

  5. Scala 学习笔记之集合(6)

    object CollectionDemo7 { def main(args: Array[String]): Unit = { //数组使用 val arr = Array("red&qu ...

  6. Scala 学习笔记之集合(5)

    import collection.mutable.Buffer object CollectionDemo6 { def main(args: Array[String]): Unit = { // ...

  7. Scala 学习笔记之集合(4)

    集合的模式匹配操作: object CollectionDemo5 { def main(args: Array[String]): Unit = { //集合模式匹配1 val ls = List( ...

  8. Scala 学习笔记之集合(9) 集合常用操作汇总

    object CollectionDemo10 { def main(args: Array[String]): Unit = { var ls = List[Int](1, 2, 3) //向后增加 ...

  9. Scala 学习笔记之集合(2)

    class StudentTT extends StudentT{ def sayBye(name: String, age: Int)(address: String){ println(" ...

随机推荐

  1. hdu-6601 Keen On Everything But Triangle

    题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=6601 Description N sticks are arranged in a row, and ...

  2. 杭电第六场 hdu6362 oval-and-rectangle 积分求期望

    oval-and-rectangle Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  3. hdu 2895 01背包 Robberies

    Robberies Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  4. 题解 CF499A 【Watching a movie】

    题意 看一部电影,从第一分钟开始看,你每次可以按下快进键,快进x分钟,电影有n个精彩片段,问看到所有精彩片段至少需要看多少分钟电影.(数据保证能看到所有精彩片段) 我们可以发现答案其实 就是间隔时间% ...

  5. 弹幕制作canvas方法,文字直播和聊天

    今天要做体育文字直播的项目,类似这样: 文字不断循环显示,我这里找到了一个网上的写法,分析后并贴在这里,并且封装成了jquery barrager方法,很是方便,分析了下原理,是刷新canvas 画布 ...

  6. Charles安装windows篇

    简介 Charles是一款非常好用的网络抓包工具,类似fiddle抓包工具,当然也可以理解为一款HTTP代理服务器.HTTP监视器.反向代理服务器等. 二.官网下载 地址:https://www.ch ...

  7. CenTOS7使用ACL控制目录权限,只给某个用户访问特定目录

    前言 Linux 基本的权限控制仅可以对所属用户.所属组.其他用户进行的权限控制,而不能精确地控制每个用户的权限.ACL 规则就是用来解决这个问题的. 使用 ACL 规则,我们可以针对单一账户设置文件 ...

  8. Python编译器及Sublime Text3安装及开发环境配置

    1.初学Python,你需要一个好的开发编辑器 在选择Python编辑器时,可能纠结于那个Python的版本更好一些,在Python2.x和Python3.x版本中, Python3.x版本更好一些, ...

  9. 警告:Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!

    执行Maven Install打包的时候,提示以下警告信息: [WARNING] Using platform encoding (GBK actually) to copy filtered res ...

  10. 转载unity编辑器xml数据库插件

    unity编辑器xml数据库插件 注:9月9日更新,其中MyXML.cs中有一句代码写错,查找功能失误,文中已经修改! 注:9月1日更新说明:xml存储结构,因为在用xml之前不知道正规的xml数据结 ...