Синхронизированный метод оценивает выражение, данное синхронизированному блоку, чтобы выяснить, какую блокировку взять.Затем необходимо вызвать, уведомить и т. Д. Для одного и того же объекта, но использование той же переменной не имеет значения.Код оценивает выражение, чтобы получить объект.
Теперь вопрос о том, ждет ли поток 1, получает ли он уведомление и просыпается, зависит от состояния гонки.Если поток1 входит в метод ожидания до того, как поток2 вызовет уведомление, тогда поток2 будет ждать, а затем проснется, как только поток2 уведомит.Если thread2 вызывает notify до того, как thread1 входит в метод wait, то thread1 ждет вечно.