Wait и уведомление, кажется, как и сообщения, которые передаются между потоками,
Они действительно не сообщения. Когда поток вызывает wait()
, он помещается в очередь ожидания, связанную с конкретным объектом монитора. Когда другой поток вызывает notify()
, он вытаскивает первый поток (если есть) из очереди и помещает его в очередь «run». Речь идет об изменении состояния потока и помещении потока в очередь, а не сообщения между потоками.
Если да, то там должны быть атомарные операции для добавления сообщений и удаления сообщений из очереди
Скорее всего есть не атомарные операции вокруг очередей сообщений, но есть, конечно, атомарные операции вокруг тестирования/установки мест памяти, которые помогают получить блокировки и разрешить другие конфликты потоков.
Должен быть вспомогательный поток для каждого потока Java, который прослушивает эти сообщения?
Существует, конечно, не вспомогательная нить для каждой нити Java. Поскольку потоки Java переходят из одного состояния в другое или нарезаются по времени, у них есть связанный поток ОС, который поддерживает свое состояние и выполняет все сообщения и сигнализацию. С большинством (если не все) реализациями также имеет ОС и аппаратное обеспечение, которое заботится о планировании потоков, оставляя исходный код JVM для выполнения Java-отчетности.