Может кто - то пожалуйста , объясните мне разницу между Sleeping
, Wait
, Park
и Monitor
состояния резьбы в VisualVM.
Вот что я нашел:
Running
: thread все еще работает.
Sleeping
: поток спит (для объекта потока был вызван метод yield ())
Wait
: поток был заблокирован мьютексом или барьером и ожидает, пока другой поток освободит блокировку
Park
: припаркованные потоки приостанавливаются, пока им не будет предоставлено разрешение. Снятие парковки с потока обычно выполняется путем вызова метода unpark () для объекта потока
Monitor
: потоки ожидают выполнения условия для возобновления выполнения.
Что я не могу понять, так это государственный парк, что на самом деле приостанавливает поток? Как мне определить в коде, что заставило поток приостановить выполнение?
Может ли кто-нибудь помочь мне в этом отношении.
Благодарю.
VisualVM отображает состояние потока Java (как описано в ответе @ Maciej) на состояние, представленное в его пользовательском интерфейсе, следующим образом:
Sleeping
иPark
являются конкретными случаями (рассчитанного) ожидания:(Отображение выполняется в
ThreadMXBeanDataManager.java
.)Краткое (и не авторитетное) обсуждение состояния потока Java можно найти здесь .
ИЗМЕНЕНО ДОБАВИТЬ:
Также стоит отметить, что потоки, блокирующие вызовы собственных методов, отображаются в JVM как
RUNNABLE
и, следовательно, VisualVM сообщает какRunning
(и как потребляющие 100% ЦП).источник