У меня есть 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
volatile. Да, синхронизируйтесь на внутренней блокировке Object
и поместите проверку в цикл while
, пока она не будет null
. Я что-то пропустил?