Как ждать/уведомлять работу на уровне JVM? - программирование
Подтвердить что ты не робот

Как ждать/уведомлять работу на уровне JVM?

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

Ответ 2

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