Scala 学习笔记之集合(8) Try和Future
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的更多相关文章
- Scala 学习笔记之集合(3)
建立一个Java类,为了演示Java集合类型向Scala集合的转换: import java.util.ArrayList; import java.util.List; public class S ...
- scala学习笔记:集合
scala> 1 to 10 res9: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9 ...
- Scala 学习笔记之集合(1)
package com.citi.scala object CollectionDemo { def main(args: Array[String]): Unit = { /** * List */ ...
- Scala 学习笔记之集合(7) Option
object CollectionDemo8 { def main(args: Array[String]): Unit = { //Option集合的使用,可以用来安全的判断null或非null,放 ...
- Scala 学习笔记之集合(6)
object CollectionDemo7 { def main(args: Array[String]): Unit = { //数组使用 val arr = Array("red&qu ...
- Scala 学习笔记之集合(5)
import collection.mutable.Buffer object CollectionDemo6 { def main(args: Array[String]): Unit = { // ...
- Scala 学习笔记之集合(4)
集合的模式匹配操作: object CollectionDemo5 { def main(args: Array[String]): Unit = { //集合模式匹配1 val ls = List( ...
- Scala 学习笔记之集合(9) 集合常用操作汇总
object CollectionDemo10 { def main(args: Array[String]): Unit = { var ls = List[Int](1, 2, 3) //向后增加 ...
- Scala 学习笔记之集合(2)
class StudentTT extends StudentT{ def sayBye(name: String, age: Int)(address: String){ println(" ...
随机推荐
- 牛客暑假多校第五场 I vcd
这个题目一个队友没读懂, 然后我读错了题目, 还让他堆了半天的公式写了半天的代码, 交上去一直0.0, 另一队友问题目有没有读错, 我坚持没有读错, 然后坑了2个小时的时间,不然应该会早一点做出来. ...
- 51nod 1060 最复杂的数(数论,反素数)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1060 题解:可以去学习一下反素数. #include < ...
- 更改mac电脑图片默认存储位置
1.创建存储位置screenshot 2.打开terminal 3.defaults write com.apple.screencapture location ~/Desktop/screensh ...
- openlivewriter安装配置
一.前言 最近工作比较忙,同时也在构思下面我应该写哪方面的文章.上一篇文章,我直接在博客园管理后台自带的编辑器写的,确实比较麻烦,于是我就打算使用官方推荐的客户端“Open Live Writer”. ...
- 金融风控100道面试题:传统银行开发转行互金top3公司并年薪40多万
知乎上有一个50万人看过的问题“为什么自学Python看不进去?”,其实原因很简单,大家缺乏能动手实战的机会. 知识要是死记硬背记在在脑海中,用不了多久就会忘记,只用依靠实战才能让知识落地. 小七这次 ...
- Abstract Factory抽象工厂模式
抽象工厂模式是是用一个超级工厂去创建其他工厂,简单点说就是工厂的父类,属于创建型模式. 目标:提供一个创建一组对象的方法,而无需指定它们具体的类(同工厂方法). 使用场景:系统的产品有多于一个的产品族 ...
- 数据库(DDL,DML,DQL、DCL)
1.数据查询语言DQL 数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE 子句组成的查询块: SELECT <字段名表> FROM <表或视图名& ...
- nodejs实现聊天机器人
技术栈 服务端: koa.koa-route.koa-websocket.request. 客户端: html.css.js.websocket. 远程聊天API: http://api.qingyu ...
- 近日让很多人议论纷纭的P++,PHP新分支?
最近大家可能有看到一个新的名词——P++. 很巧这个词来源于不久前从 Zend 公司离职的 Zeev Suraski 以 PHP 开发组成员的身份提议要创建 PHP 方言,暂命名为 P++. 老兄最近 ...
- H2 数据库使用简介
博客地址:http://www.moonxy.com 一.前言 H2 是一个用 Java 开发的嵌入式数据库,它本身只是一个类库,即只有一个 jar 文件,可以直接嵌入到应用项目中.H2 主要有如下三 ...