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