В большинстве операционных систем поток представлен объектом, который можно перемещать между различными контейнерами в зависимости от его состояния.Эти контейнеры традиционно называются «очередями», даже если они не обязательно реализованы в виде реальных очередей «первым пришел-первым вышел».
Когда поток вызывает o.wait()
, его объект перемещается из «запущенного в данный момент»msgstr "очередь в очередь, которая содержит только те объекты, которые ожидают o.notify()
.Когда другой поток вызывает o.notify()
, операционная система выбирает один поток из этой очереди и перемещает его в очередь потоков, ожидающих своей очереди, чтобы войти (или вернуться в) блок synchronized(o)
.
Этов значительной степени только вещь, которую o.notify()
делает.Фактически, если очередь потоков, ожидающих o.notify()
, пуста, то o.notify()
вообще ничего не делает.
o.notifyAll()
- то же самое, за исключением того, что вместо перемещения только одного потока,он перемещает все ожидающие потоки.