Каковы состояния потока Dalvik?

В каждом дампе ANR перечислены состояния всех потоков во время ANR. Я знаю, что означает WAIT, но что означают SUSPENDED и MONITOR?

Заранее спасибо...


person Barry Fruitman    schedule 21.04.2014    source источник


Ответы (1)


Резюме состояний потока Dalvik:

  • ИНИЦИАЛИЗАЦИЯ - еще не запущено.
  • ЗАПУСК - еще не работает, но почти.
  • ЗОМБИ - умерший (вы не должны этого видеть).
  • RUNNING (a/k/a RUNNABLE) — поток активно выполняется. Виртуальная машина должна приостановить все потоки для создания дампа стека, поэтому обычно вы не увидите этого ни для одного потока, кроме того, который выполняет дамп стека.
  • WAIT — поток вызывается wait() и терпеливо ждет.
  • TIMED_WAIT - поток с вызовом wait() с тайм-аутом. (Thread.sleep() реализован как ожидание по времени.)
  • МОНИТОР - поток заблокирован на блокировке монитора, т.е. он завис, пытаясь войти в "синхронизированный" блок.
  • NATIVE — поток выполняется в собственном коде. Виртуальная машина не приостанавливает потоки в собственном коде, если они не выполняют вызов JNI (в этот момент они переходят в RUNNING, а затем сразу в SUSPENDED).
  • VMWAIT — поток заблокирован, получая ресурс виртуальной машины, как внутренний мьютекс. Или, может быть, ожидание того, что нужно сделать (например, потоки компилятора и сборщика мусора).
  • SUSPENDED — поток был работоспособен, но был приостановлен. Как отмечалось ранее, дампер стека любит приостанавливать все потоки перед обходом их стеков, поэтому ваши занятые потоки обычно будут отображаться таким образом. (В более старых версиях этого состояния не существовало; раньше «приостановлено» означало «РАБОТАЕТ с ненулевым sCount».)
person fadden    schedule 21.04.2014
comment
Отличный ответ, спасибо. Хотел бы я поставить ДВЕ галочки! - person Barry Fruitman; 22.04.2014
comment
Отлично, я получил их сейчас - person snowdream; 19.03.2015
comment
RUNNING (a/k/a RUNNABLE) — поток активно выполняется. Виртуальная машина должна приостановить все потоки для создания дампа стека, поэтому обычно вы не увидите этого ни для одного потока, кроме того, который выполняет дамп стека. Я этого не понимаю. Какое состояние потока я не увижу, RUNNABLE или RUNNING? - person dragonfly; 03.06.2015
comment
Имена ссылаются на одно состояние. Внутренняя константа и значение, отображаемое отладчиками JDWP, — RUNNING, но код дампа потока печатает RUNNABLE. a/k/a означает также известный как и указывает, что одно имя является псевдонимом другого. - person fadden; 03.06.2015