Подтвердить что ты не робот

Профилирование Java JVM, состояние потока - что означает статус "Монитор"?

enter image description here

Я использую visualVM для подключения многопоточного приложения Java, поток имеет 4 статуса, а именно: запуск, спящий режим, ожидание, монитор. Что означает статус мониторинга? Какая разница между wait и Monitor?

4b9b3361

Ответ 1

Эти состояния такие же, как указано в Thread.State enum. "Подождите" означает, что в документации указано:

Поток находится в состоянии ожидания из-за вызова одного из следующих способов:

  • Object.wait без тайм-аута
  • Thread.join без тайм-аута
  • LockSupport.park

"Монитор" - это состояние BLOCKED, в котором поток ожидает получения блокировки объекта (потому что он пытается ввести блок или метод synchronized, а другой поток уже содержит связанную блокировку).

Ответ 2

Это не статус "мониторинга"... Он указывает, что поток находится в состоянии Thread.State.BLOCKED. Я вижу, есть еще один хороший ответ, я просто укажу вам на эту ссылку для более глубокого объяснения

Ответ 3

Монитор будет означать, что поток ожидает завершения блокировки объекта. Например, когда один поток запускает синхронизированный метод, а другой пытается вызвать его на том же объекте, он не сможет до тех пор, пока первый вызов метода не будет завершен. Это связано с тем, что в первом потоке есть монитор или блокировка на этом объекте, поэтому второй должен ждать, пока он не будет выпущен.

Из Учебники по Oracle Threading:

"Синхронизация построена вокруг внутреннего объекта, известного как внутренняя блокировка или блокировка монитора (спецификация API часто ссылается на этот объект просто как на" монитор ".) Внутренние блокировки играют роль в обоих аспектах синхронизации: принудительное использование эксклюзивных доступ к состоянию объекта и установление происходит до отношений, которые необходимы для видимости."