У меня есть трудное время, чтобы действительно понять, как это работает:Почему условия ожидания while-loop безопасны в многопоточном контексте?
while(<some condition>){
wait();
}
OR this example:
while(<some condition>){
condition.await();
}
Когда нить уже прошла <some condition>
, это действительно может случиться, что <some condition>
уже false
когда wait()
или await()
казнены.
Таким образом, wait()
или await()
могут быть вызваны с уже недействительным условием - это означает, что намерение нарушено.
Что не так с моей логикой?
Как это было бы неверно? Если это было уже неверно, Java даже не войдет в цикл while. – user2357112
между проверкой состояния (предположим, что это правда) и вызовом wait() существует время неопределенности, когда условие может быть изменено (установить false). Но ожидание будет вызвано в любом случае. –
@VladimirNabokov До тех пор, пока поток не вызовет 'wait', он удерживает блокировку. Весь смысл 'wait' - это атомизировать блокировку и ждать. –