Scala Future思考题几则
最近想到的几个问题,罗列在此.如果有答案的小伙伴,欢迎私信留言~~
operate为一个普通函数,1-5题判断以下各种实现是否并发执行,为什么?
1
for {
a <- Future(operateA(...))
b <- Future(operateB(...))
} yield (...)
2
val a = Future(operateA(...))
val b = Future(operateB(...))
for {
va <- a
vb <- b
} yield (...)
3
lazy val a = Future(operateA(...))
lazy val b = Future(operateB(...))
for {
va <- a
vb <- b
} yield (...)
4
val a = operatF
val b = operatF
for {
va <- a
vb <- b
} yield (...)
def operatF = Future(operateA())
5
val a = operatF(1)
val b = operatF(1)
for {
va <- a
vb <- b
} yield (...)
def operatF(a: Int) = Future(operateA(a))
7
val a = Future(operateA(...))
val b = Future(operateB(...))
val c = Future(b)
Future(
for {
va <- a
vb <- b
vc <- c
} yield (...)
)
8 是否会报异常,为什么?
val f1 = Future{
Thread.sleep(3000)
true
}
val f2 = Future{
Thread.sleep(3000)
true
}
val f3 = Future{
Thread.sleep(100)
true
}
val f4 = Future.sequence(Seq(f1, f2, f3))
val re = Await.result(f4, 1300 milliseconds)
operate(re)
9 该操作是否可行,为什么?
val f1 = Future(operateA)
val f2 = Future(operateB)
val f3 = Future{Thead sleep 1000)
val re = Try(Await.result(Future.sequence(List(f1, f3)), 100 milliseconds))
re match {
case Success(s) => ...
case Failure(e) => operateC(f1)
}
println(re)
10 如何实现无锁Future超时限制
11 如何实现具有前提的Future序列
- task 1 需要在 10 ms内完成
- 若task1 在时限内完成则进入 4.
- 若task1 未在时限内完成则Future.failure(TimeoutException)
- task 2 需要在task1完成后 20 ms内完成
- task3 需要在总时间50ms内完成