Который 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).
