Обратите внимание, что есть одно ключевое отличие в использовании Object.wait () и Thread.sleep () внутри блока синхронизации: Thread.sleep () не освобождает заблокированный монитор, поэтому никто еще может стать владельцем монитора.
Кроме того, Object.wait () не гарантирует, что указанная задержка будет строго соблюдаться. Прежде всего, после того, как проходит задержка, поток все еще может ожидать другого потока, который тем временем стал владельцем монитора; и он может конкурировать с другими потоками, ожидающими захвата монитора.
Во-вторых, мифическое ложное пробуждение, как оно описано в Java 6 API javadoc:
Нить тоже может проснуться без
быть уведомленным, прерванным или установленным временем
так называемое ложное пробуждение.
Маловероятно, что каждый кусок кода, использующий Object.wait (), должен учитывать это.