Сложно ответить на это однозначно, поскольку в спецификации языка Java не указано , почему реализация JVM может захотеть сделать это (в этом разделе указано только, что она может ), но я нашел довольно интересную историю ложных пробуждений в Википедии .
Фактическая статья о потоках POSIX, но я не думаю, что это слишком далеко, чтобы предполагатьна то, что на потоки в Java оказало определенное влияние поведение потоков POSIX:
Ложные пробуждения могут показаться странными, но в некоторых многопроцессорных системах обеспечение полностью предсказуемого пробуждения условия может существенно замедлить все операции с переменными условия.Расовые условия, которые вызывают ложные пробуждения, следует считать редкими.
Эта цитата принадлежит Дэвиду Р. Бутенхофу, который затем говорит:
Хотя действительно былинекоторые члены рабочей группы, которые утверждали, что теоретически можно представить, что может быть такая реализация, на самом деле причина не в этом.(И они так и не смогли доказать это.) Потоки POSIX были результатом большой напряженности между прагматичными программистами в реальном времени и в основном академическими исследователями.Ложные пробуждения - это механизм академической клики компьютерных ученых, позволяющий каждому писать чистый код, проверяющий и проверяющий предикаты!
"Но (возможно) в значительной степени ложный (или, по крайней мере, загадочно-философский) аргумент" эффективности "прошел лучше с людьми в реальном времени, и реальная причина обычно отводилась на второе место в обосновании.
"Я много раз думал о том, как вы могли бы построить правильную и практическую реализацию, которая действительно имела бы ложные пробуждения.Мне никогда не удавалось построить пример.Однако это не значит, что его нет, и это хорошая история.