VisualVM - потокові стани


86

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

введіть тут опис зображення

Це я знайшов:

Running: нитка все ще працює.
Sleeping: нитка спить (метод yield () був викликаний на об’єкті потоку)
Wait: потік заблокований мьютексом або бар’єром і чекає, поки інший потік звільнить блокування
Park: припарковані потоки призупиняються, доки їм не буде надано дозвіл. Розпаркування потоку зазвичай здійснюється шляхом виклику методу unpark () на об'єкті потоку
Monitor: потоки чекають умови, щоб стати істинним, щоб відновити виконання

Що я не можу зрозуміти, це державний парк, що насправді призупиняє нитку? Як визначити в коді, що змусило потік призупинити своє виконання?

Чи може хтось, будь ласка, направити мене в цьому плані.

Дякую.

Відповіді:


53

Я знайшов дуже приємну схему, яка майже повністю описує все, що вам потрібно / хочете знати.

введіть тут опис зображення

  1. Новий

Потік знаходиться в новому стані, якщо ви створюєте екземпляр класу Thread, але до виклику методу start ().

  1. Біговий

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

  1. Біг

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

  1. Приурочене очікування

Часове очікування - це стан потоку для потоку, що очікує із заданим часом очікування. Потік знаходиться в стані очікуваного часу через виклик одного з наступних методів із заданим позитивним часом очікування:

  • Thread.sleep (час сну)
  • Object.wait (час очікування)
  • Thread.join (час очікування)
  • LockSupport.parkNanos (час очікування)
  • LockSupport.parkUntil (час очікування)
  1. Не запущений (заблокований)

Це стан, коли потік ще живий, але в даний час не може запускатися.

  1. Припинено

Потік перебуває у завершеному або мертвому стані, коли його метод run () виходить.

Сподіваємось, це відповідає на ваше запитання :).

Автостоянка:

Вимикає поточний потік для планування потоків, якщо не існує дозволу.

Потоки припарковані або призупинені, якщо ви хочете назвати це так, оскільки воно не має дозволу на виконання. Після надання дозволу потік буде розпарковано та виконано.

Дозволи LockSupport пов'язані з потоками (тобто дозвіл дається певному потоку) і не накопичується (тобто на потік може бути лише один дозвіл, коли потік споживає дозвіл, він зникає).


Дякую за Вашу відповідь. Я теж пройшов через це, але якось моє запитання все ще залишалося без відповіді. Не могли б ви, будь ласка, ще раз пройти моє запитання; Я оновив його. Я спеціально шукаю відповіді на тему штату парк.
Алі Шах Ахмед

ще раз дякую за оновлення. Тож у штаті парк, нитка чекає, поки вона запланується, чи вона чекає за якихось умов?
Алі Шах Ахмед

@AliShahAhmed Thread чекає на дозвіл (умову) на виконання - якщо ця умова не виконується протягом певного періоду, досягнуто час очікування та потік припинено - PS. Вибачте за затримку відповіді ха-ха
Maciej Cygan

39

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% ЦП).


2
Це повинна бути правильна відповідь. Питання стосувалося станів потоку JVisualVM, а не станів потоку JVM.
digital_infinity
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.