У меня есть 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
. Я что-то упустил?