由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - scala 的future 和 promise有机制防止dead lock吗?
相关主题
一个scala future的实例Golang的promise lib哪个好?
scala 问题请教 -- scala.runtime.Tuple2Zipped异步编程+FP的程序的可读性太差
Scala debug面试问题一问 (转载)
scala的def或val是冗余的how to debug multi-thread program?
node.js不可放弃Swift这么弱?
请问个javascript object 怎么访问属性的问题俺现在开始面试房客的时候会问Java的问题
scala 真是一个无法无天的糟货有intellij 高手么 问2个java技巧
sbt错误:object xxx is not a member of package yyy问个java8问题
相关话题的讨论汇总
话题: promise话题: success话题: int话题: println话题: val
进入Programming版参与讨论
1 (共1页)
x***4
发帖数: 1815
1
比如说下面的code会出现dead lock的情况。实践中有什么好的practice可以防止dead
lock呢?
import scala.concurrent.{Future, Promise}
import scala.util.{Failure, Success}
import scala.concurrent.ExecutionContext.Implicits.global
val promise1: Promise[Int] = Promise()
val promise2: Promise[Int] = Promise()
val future1 = promise1.future
val future2 = promise2.future
future1 onComplete {
case success: Success[Int] => {
promise2.success(123)
println("1 complete")
}
case _ => println("1 fail")
}
future2 onComplete {
case success: Success[Int] => {
promise1.success(123)
println("2 complete")
}
case _ => println("2 fail")
}
d******e
发帖数: 2265
2
这个用法好新奇。能不能给个实际点的例子。

dead

【在 x***4 的大作中提到】
: 比如说下面的code会出现dead lock的情况。实践中有什么好的practice可以防止dead
: lock呢?
: import scala.concurrent.{Future, Promise}
: import scala.util.{Failure, Success}
: import scala.concurrent.ExecutionContext.Implicits.global
: val promise1: Promise[Int] = Promise()
: val promise2: Promise[Int] = Promise()
: val future1 = promise1.future
: val future2 = promise2.future
: future1 onComplete {

e***i
发帖数: 231
3
首先,所有的Future都会直接直接返回,不会block,所以你上述的代码会被跳过不执
行。
其次,Future说到底都最终是要执行(block)的,所谓“出来混总是要还的”。这时
Deadlock会被timeout机制打破。你的代码最后可以加上几行进行测试:
import scala.concurrent._
import scala.concurrent.duration._
println(Await.result(future1, 5 seconds))
结果是:
[error] (run-main-6) java.util.concurrent.TimeoutException: Futures timed
out after [5 seconds]
最后,deadlock是semantic的(e.g. Catch 22),不是语言本身可以消除的。
1 (共1页)
进入Programming版参与讨论
相关主题
问个java8问题node.js不可放弃
珍惜生命,远离 R 和 Go请问个javascript object 怎么访问属性的问题
gdb vs print or printlnscala 真是一个无法无天的糟货
go 怎么 disable这个sbt错误:object xxx is not a member of package yyy
一个scala future的实例Golang的promise lib哪个好?
scala 问题请教 -- scala.runtime.Tuple2Zipped异步编程+FP的程序的可读性太差
Scala debug面试问题一问 (转载)
scala的def或val是冗余的how to debug multi-thread program?
相关话题的讨论汇总
话题: promise话题: success话题: int话题: println话题: val