【发布时间】:2010-05-14 19:47:23
【问题描述】:
我有一个 Java Thread,它公开了一个其他线程想要访问的属性:
class MyThread extends Thread {
private Foo foo;
...
Foo getFoo() {
return foo;
}
...
public void run() {
...
foo = makeTheFoo();
...
}
}
问题是从它运行到foo 可用需要很短的时间。来电者可以在此之前致电getFoo() 并获得null。我宁愿他们在初始化发生后简单地阻塞、等待并获取值。 (foo 之后永远不会更改。)它准备好需要几毫秒,所以我对这种方法很满意。
现在,我可以使用wait() 和notifyAll() 来实现这一点,并且有 95% 的机会我会做对。但我想知道你们会怎么做; java.util.concurrent 中是否有一个原语可以做到这一点,我错过了?
或者,您将如何构建它?是的,让foo 不稳定。是的,在内部锁Object 上同步并将检查放入while 循环,直到它不是null。我错过了什么吗?
【问题讨论】:
标签: java multithreading properties synchronization blocking