Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: Barry FruitmanОтветов: 1

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

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

androiddalvikandroid-anr-dialog

Ответы

Ответ 1 · рейтинг 37 · fadden

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

  • ИНИЦИАЛИЗАЦИЯ - еще не запущено.
  • ЗАПУСК - еще не работает, но почти.
  • ЗОМБИ - умерший (вы не должны этого видеть).
  • RUNNING (a/k/a RUNNABLE) - поток активно выполняется. Виртуальная машина должна приостановить все потоки для создания дампа стека, поэтому обычно вы не увидите этого ни для одного потока, кроме того, который выполняет дамп стека.
  • WAIT - поток вызывается wait() и терпеливо ждет.
  • TIMED_WAIT - поток с вызовом wait() с тайм-аутом. (Thread.sleep() реализован как ожидание по времени.)
  • МОНИТОР - поток заблокирован на блокировке монитора, т.е. он завис, пытаясь войти в "синхронизированный" блок.
  • NATIVE - поток выполняется в собственном коде. Виртуальная машина не приостанавливает потоки в собственном коде, если они не выполняют вызов JNI (в этот момент они переходят в RUNNING, а затем сразу в SUSPENDED).
  • VMWAIT - поток заблокирован, получая ресурс виртуальной машины, как внутренний мьютекс. Или, может быть, ожидание того, что нужно сделать (например, потоки компилятора и сборщика мусора).
  • SUSPENDED - поток был работоспособен, но был приостановлен. Как отмечалось ранее, дампер стека любит приостанавливать все потоки перед обходом их стеков, поэтому ваши занятые потоки обычно будут отображаться таким образом. (В более старых версиях этого состояния не существовало; раньше "приостановлено" означало "РАБОТАЕТ с ненулевым sCount".)

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы