【发布时间】:2011-02-14 07:29:15
【问题描述】:
由于我找不到它的标准实现,我创建了这个小类,但我认为这样简单的东西应该已经存在于某个地方:
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 中是否有标准实现?
- 我的实现是否正确?
【问题讨论】:
-
我称之为“不是 Java” :-)
-
两个问题... setValue 应该被多次调用吗?如果 setValue 应该被多次调用,那么这段代码真的正确同步了吗? (我对 Scala 了解不多,但我看不到如何保证 getValue 会返回正确的值。我 latch.await 够了吗?)
-
@Gugussee 正确:setValue 只会调用一次。 latch.await 足够了吗?我想是的,但我不会赌钱。
-
@Gugussee 我碰巧又看了一遍……我同意你的看法。设置/和访问值应该是同步的,但是对锁存器的访问应该在同步块之外......我认为。
标签: java scala concurrency