Который VisualVM - Государства-Нить
может кто-то пожалуйста, объясните мне разницу между Sleeping
,Wait
,Park
и Monitor
состояния потока в VisualVM.
вот что я нашел:
Running
: поток все еще выполняется. Sleeping
: поток спит (метод yield () был вызван на объект потока)Wait
: поток был заблокирован мьютексом или барьером и ждет, пока другой поток освободит блокировкуPark
: припаркованные нити приостановлено до получения разрешения. Unparking поток обычно выполняется путем вызова метода unpark () на объекте потокаMonitor
: потоки ждут условия, чтобы стать истинным, чтобы возобновить выполнение
то, что я не могу понять, это государственный парк, что на самом деле приостанавливает поток? Как определить в коде, что заставило поток приостановить его выполнение?
может кто-нибудь, пожалуйста, направлять меня в этом отношении.
спасибо.
2 ответа:
Я использовал google, и на самой первой странице, которая появилась, была очень хорошая диаграмма, которая в значительной степени описывает все, что вам нужно/хотите знать. В следующий раз стоит попробовать google для таких вопросов.
1) Новый
поток находится в новом состоянии, если вы создаете экземпляр класса Thread, но до вызова метода start ().
2) Runnable
поток находится в состоянии runnable после вызова start() метод, но планировщик потоков не выбрал его в качестве текущего потока.
3) под управлением
поток находится в запущенном состоянии, если планировщик потока выбрал его.
4) Время ожидания
Timed waiting-это состояние потока для потока, ожидающего с заданным временем ожидания. Поток находится в состоянии ожидания по времени из-за вызова одного из следующих методов с указанным положительным ожиданием время:
- нить.сон(sleeptime)
VisualVM отображает состояние потока Java (как описано в ответе @Maciej) в состояние, представленное в его пользовательском интерфейсе следующим образом:
BLOCKED -> Monitor RUNNABLE -> Running WAITING/TIMED_WAITING -> Sleeping/Park/Wait (see below) TERMINATED/NEW -> Zombie
Sleeping
иPark
конкретные случаи (приуроченного) ожидания:Sleeping: specifically waiting in Thread.sleep(). Park: specifically waiting in sun.misc.Unsafe.park() (presumably via LockSupport).
(отображение выполняется в
ThreadMXBeanDataManager.java
.)краткое (и неавторизованное) обсуждение состояния потока Java можно найти здесь.
ОТРЕДАКТИРОВАНО, ЧТОБЫ ДОБАВИТЬ:
также стоит отметить, что потоки блокируются вызовы собственных методов отображаются в JVM как
RUNNABLE
, и, следовательно, сообщается VisualVM какRunning
(и как потребляющий 100% CPU).