Профилирование Java JVM, состояние потока - что означает статус "Монитор"?
![enter image description here]()
Я использую visualVM для подключения многопоточного приложения Java, поток имеет 4 статуса, а именно: запуск, спящий режим, ожидание, монитор. Что означает статус мониторинга? Какая разница между wait и Monitor?
Ответы
Ответ 1
Эти состояния такие же, как указано в Thread.State
enum. "Подождите" означает, что в документации указано:
Поток находится в состоянии ожидания из-за вызова одного из следующих способов:
- Object.wait без тайм-аута
- Thread.join без тайм-аута
- LockSupport.park
"Монитор" - это состояние BLOCKED
, в котором поток ожидает получения блокировки объекта (потому что он пытается ввести блок или метод synchronized
, а другой поток уже содержит связанную блокировку).
Ответ 2
Это не статус "мониторинга"... Он указывает, что поток находится в состоянии Thread.State.BLOCKED
. Я вижу, есть еще один хороший ответ, я просто укажу вам на эту ссылку для более глубокого объяснения
Ответ 3
Монитор будет означать, что поток ожидает завершения блокировки объекта. Например, когда один поток запускает синхронизированный метод, а другой пытается вызвать его на том же объекте, он не сможет до тех пор, пока первый вызов метода не будет завершен. Это связано с тем, что в первом потоке есть монитор или блокировка на этом объекте, поэтому второй должен ждать, пока он не будет выпущен.
Из Учебники по Oracle Threading:
"Синхронизация построена вокруг внутреннего объекта, известного как внутренняя блокировка или блокировка монитора (спецификация API часто ссылается на этот объект просто как на" монитор ".) Внутренние блокировки играют роль в обоих аспектах синхронизации: принудительное использование эксклюзивных доступ к состоянию объекта и установление происходит до отношений, которые необходимы для видимости."