10

Подождите и сообщите, как сообщения, передаваемые между потоками, если это правда, должны быть очереди для буферизации этих сообщений. Если это так, то должны быть атомарные операции для добавления сообщений и удаления сообщения из очереди, также должен быть вспомогательный поток для каждого потока Java, который прослушивает эти сообщения?Как ждать/уведомлять работу на уровне JVM?

Было бы здорово услышать ваши мысли.

ответ

0

В JVM используются примитивы, предоставляемые операционной системой или иногда сторонней библиотекой. Никакая JVM не реализует эти вещи. Windows JVM обычно используют потоки Windows, тогда как в Linux реализация может использовать либо потоки ядра Linux, либо библиотеку POSIX Threads (pthreads). В Mac OS X, выбор включает pthreads или какао NSThread библиотеки

1

Wait и уведомление, кажется, как и сообщения, которые передаются между потоками,

Они действительно не сообщения. Когда поток вызывает wait(), он помещается в очередь ожидания, связанную с конкретным объектом монитора. Когда другой поток вызывает notify(), он вытаскивает первый поток (если есть) из очереди и помещает его в очередь «run». Речь идет об изменении состояния потока и помещении потока в очередь, а не сообщения между потоками.

Если да, то там должны быть атомарные операции для добавления сообщений и удаления сообщений из очереди

Скорее всего есть не атомарные операции вокруг очередей сообщений, но есть, конечно, атомарные операции вокруг тестирования/установки мест памяти, которые помогают получить блокировки и разрешить другие конфликты потоков.

Должен быть вспомогательный поток для каждого потока Java, который прослушивает эти сообщения?

Существует, конечно, не вспомогательная нить для каждой нити Java. Поскольку потоки Java переходят из одного состояния в другое или нарезаются по времени, у них есть связанный поток ОС, который поддерживает свое состояние и выполняет все сообщения и сигнализацию. С большинством (если не все) реализациями также имеет ОС и аппаратное обеспечение, которое заботится о планировании потоков, оставляя исходный код JVM для выполнения Java-отчетности.