Если это все, что находится в синхронизированном блоке, тогда является антипаттерном, точка синхронизации заключается в том, чтобы сделать что-то внутри блока, установить какое-то условие, затем вызвать notify
или notifyAll
чтобы разбудить один или несколько ожидающих потоков.
Когда вы используете ожидание и уведомление, вы должны использовать условную переменную, см. это руководство по Oracle :
ПримечаниеВсегда вызывать wait внутри цикла, который проверяет ожидаемое условие.Не думайте, что прерывание было для конкретного условия, которого вы ждали, или что условие все еще выполняется.
Не следует предполагать, что вы получили уведомление только потому, что поток завершил вызов из Object # wait по нескольким причинам:
При вызовеверсия ожидания, которая принимает значение тайм-аута. Нет способа узнать, закончилось ли ожидание из-за получения уведомления или из-за истечения времени ожидания.
Вы должны учитывать возможность того, что поток можетпросыпаться от ожидания без получения уведомления («ложное пробуждение»).
Ожидающий поток, который получает уведомление, все еще должен повторно получить блокировку, которую он снял, когда он начал ждать,нет атомной связи между этими двумя событиями;в промежутке между уведомлением и повторной блокировкой может действовать другой поток и, возможно, изменить состояние системы, чтобы уведомление стало недействительным.
Может быть случай, когда уведомлениепоток действует до того, как какой-либо поток ожидает, поэтому уведомление не имеет никакого эффектаПредполагая, что один поток перейдет в ожидание, прежде чем другой поток уведомит об этом, опасно, если вы ошиблись, ожидающий поток зависнет на неопределенное время.
Таким образом, само по себе уведомление недостаточно хорошовы в конечном итоге угадываете, произошло ли уведомление, когда API ожидания / уведомления не дает вам достаточно информации, чтобы знать, что происходит.Даже если другая работа, выполняемая уведомляющим потоком, не требует синхронизации, обновление условной переменной делает это;должно быть по крайней мере обновление общей переменной условия в синхронизированном блоке.