因为我找不到它的标准实现,所以我创建了这个小类,但我认为一些简单的东西应该已经存在于某处:
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
}
}
它的目的是在两个线程之间交换一个值(在我的例子中是主线程 + EDT)。从使用 getValue() 方法的代码来看,它看起来几乎像一个 Future,但我发现 Future 实现期望调用者提供要执行的代码,这在我的情况下不起作用。
所以我的问题是:
- 这样的东西有名字吗?
- 是否有 java 或 scala 中的标准实现?
- 我的实现是否正确?
最佳答案
Scala 标准库提供了这种同步机制作为 scala.concurrent.SyncVar[T]
类。
这个 Scala REPL session 演示了它是如何工作的:
scala> import concurrent._
import concurrent._
scala> import ops._
import ops._
我正在导入 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) }
我正在生成另一个线程。 get
阻塞,直到 syncInt
中有一个值。
scala> syncInt.isSet
res1: Boolean = false
scala> syncInt.set(103)
scala> got 103
上面已经被我们之前创建的线程打印出来了。
scala> syncInt.isSet
res3: Boolean = true
scala> syncInt.get
res4: Int = 103
关于java - 这种并发相关的类怎么调用呢?是否有标准实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4989753/