2014-12-10 52 views
48

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

enter image description here

Это то, что я нашел:

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

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

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

Спасибо.

+0

Google - ваш лучший друг - используйте его! –

+1

Спасибо! Я просто обновляю свой вопрос с тем, что я нашел в google. –

ответ

29

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

enter image description here

1) Новый

нить находится в новом состоянии, если вы создаете экземпляр класса Thread, но до вызова метода запуска().

2) Runnable

нить находится в состоянии после того, как работоспособный вызова метода запуска(), но нить планировщик не выбрал его, чтобы быть ходовой резьбы.

3) Запуск

нить находится в рабочем состоянии, если планировщик потоков выбрал его.

4) Timed ждет

Timed ожидания является состояние нити для потока ожидания с заданным временем ожидания. Поток находится в состоянии ожидания таймерного из-за вызов одного из следующих методов с заданным положительным временем ожидания:

  • Thread.sleep (отход ко сон)
  • Object.wait (тайм-аут)
  • Thread.join (тайм-аут)
  • LockSupport.parkNanos (тайм-аут)
  • LockSupport.parkUntil (тайм-аут)

5) Non-Runnable (Blocked)

Это состояние, когда нить все еще жива, но в настоящее время не имеют права работать.

6) Отменено

Поток в прекращаются или мертвым состояние, когда его запуск() метод выходов.

Надеюсь, это отвечает на ваш вопрос :).

Парковка:

Отключает текущий поток для целей планирования потоков, если разрешение на не доступно.

Нити припаркованы или приостановлены, если вы хотите называть это таким образом, потому что у него нет разрешения на выполнение. После того, как разрешение будет предоставлено, поток будет неаккурен и выполнен.

Разрешения LockSupport связаны с потоками (то есть разрешение передается конкретному потоку) и не накапливаются (т. Е. Может быть только одно разрешение на поток, когда поток потребляет разрешение, он исчезает).

+0

Спасибо за ваш ответ. Я также прошел через это, но почему-то мой вопрос по-прежнему остался без ответа. Не могли бы вы повторить мой вопрос снова; Я обновил его. Я специально ищу ответ w.r.t. состояние парка. –

+0

@AliShahAhmed обновил мой ответ :) –

+0

еще раз спасибо за обновление. Таким образом, в состоянии парка, это поток, ожидающий его, чтобы он был запланирован или он ждет какого-то условия? –

19

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 можно найти here.

отредактирован ADD:

Стоит также отметить, что потоки блокировки в вызовах собственных методов появляются в JVM, как RUNNABLE, и, следовательно, сообщает VisualVM, как Running (и как потребление 100% CPU).

 Смежные вопросы

  • Нет связанных вопросов^_^