Документация по Java, которую я использую, дает понять, что метод Object.wait()
запрашивает связанный монитор перед его возвратом, независимо от того, был ли он уведомлен или является ложным пробуждением; любой возврат нормального метода будет предшествовать повторной регистрации монитора.Возникает ли метод Object.wait(), когда он выдает исключение?
Однако, немного менее понятно, что произойдет в событии Object.wait()
выдает исключение, например, Interrupted Exception
. Я предполагаю, что он действительно перезагружает блокировку, прежде чем выбросить исключение. Однако, документация не очень четко об этом, так что я не уверен на 100% ...
Вот это documentaiton Я смотрю на: http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html#wait%28%29
Итак, мой вывод правильно, или мой код вызова должен обращаться к состоянию монитора (например, при необходимости перезагружать его) после того, как выбрано исключение?
Эмпирически это кажется правильным. Это также разумно. Я не уверен, что это может быть выведено из документации, что указывает на ошибку в документации. –
@PatriciaShanahan Я полностью переписал ответ: JLS на самом деле четко указывает, что замок будет безоговорочно восстановлен. –
@PatriciaShanahan Спасибо, это объясняет это очень четко. Спасибо также за ссылку JLS ... Я буду использовать ее в следующий раз, когда у меня будет аналогичный вопрос, который не рассматриваются в документах API. :) –