Который VisualVM - Государства-Нить


может кто-то пожалуйста, объясните мне разницу между Sleeping,Wait,Park и Monitor состояния потока в VisualVM.

вот что я нашел:

Running: поток все еще выполняется.
Sleeping: поток спит (метод yield () был вызван на объект потока)
Wait: поток был заблокирован мьютексом или барьером и ждет, пока другой поток освободит блокировку
Park: припаркованные нити приостановлено до получения разрешения. Unparking поток обычно выполняется путем вызова метода unpark () на объекте потока
Monitor: потоки ждут условия, чтобы стать истинным, чтобы возобновить выполнение

то, что я не могу понять, это государственный парк, что на самом деле приостанавливает поток? Как определить в коде, что заставило поток приостановить его выполнение?

может кто-нибудь, пожалуйста, направлять меня в этом отношении.

спасибо.

2 57

2 ответа:

Я использовал google, и на самой первой странице, которая появилась, была очень хорошая диаграмма, которая в значительной степени описывает все, что вам нужно/хотите знать. В следующий раз стоит попробовать google для таких вопросов.

enter image description here

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).