Предположим есть слудующий код.
Тред 2:
this.surface = new Surface(surf_texture);
// initialized_s - это Object()
synchronized (this.initialized_s) {
this.initialized_s.notify();
}
Тред 1:
thread.start();
synchronized (thread.initialized_s) {
while (thread.surface == null) {
try {thread.initialized_s.wait();} catch (InterruptedException e) {}
}
}
Насколько я понимаю, нет никаких гарантий, что изменения переменной
surface будут когда-нибудь видны.
Когда мы вернемся из wait(), мы будем видеть null.
Далее (т.к. мы тестируем в цикле) мы зайдем в wait() еще раз.
Но т.к. это был настоящий wake-up, вызванный notify(),
то второго notify() уже не будет. Насколько я понимаю, далее wait() снимет
блокировку, снова переведет тред в сон и мы так и останемся на этом месте.
Вопросы:
1) Как это починить?
2) Хотелось указание на раздел/главу/страницу авторитетного источника, где говорится, что такой-то и такой-то способ точно дает гарантию.

