Jen*_*der 5 java concurrency scala
由于我找不到它的标准实现,我创建了这个小类,但我认为这很简单,因为它应该存在于某个地方:
class ReturnValue {
private var value = false
private val latch = new java.util.concurrent.CountDownLatch(1)
def setValue(aValue: Boolean) {
value = aValue
latch.countDown()
}
def getValue() = {
latch.await
value
}
}
Run Code Online (Sandbox Code Playgroud)
它的目的是在两个线程之间交换一个值(在我的情况下是主线程+ EDT).从使用getValue()方法的代码看起来它几乎就像Future,但我发现Future实现期望调用者提供要执行的代码,这在我的情况下不起作用.
所以我的问题是:
Ale*_*rov 11
Scala标准库提供了这种类同步机制scala.concurrent.SyncVar[T].
此Scala REPL会话演示了它的工作原理:
scala> import concurrent._
import concurrent._
scala> import ops._
import ops._
Run Code Online (Sandbox Code Playgroud)
我正在导入ops._以Thread轻松生成另一个.
scala> val syncInt = new SyncVar[Int]
syncInt: scala.concurrent.SyncVar[Int] = scala.concurrent.SyncVar@17823918
scala> spawn { println("got %d" format syncInt.get) }
Run Code Online (Sandbox Code Playgroud)
我正在产生另一个线程.get阻止,直到有一个值syncInt.
scala> syncInt.isSet
res1: Boolean = false
scala> syncInt.set(103)
scala> got 103
Run Code Online (Sandbox Code Playgroud)
以上内容由我们之前创建的主题打印出来.
scala> syncInt.isSet
res3: Boolean = true
scala> syncInt.get
res4: Int = 103
Run Code Online (Sandbox Code Playgroud)