В целях отладки я хочу выяснить, какие потоки моей программы все еще запущены. Кажется, что один или несколько потоков, которые случайно не были прерваны. Какой-то хороший печатный формат будет бонусом.Темы Java: Посмотрите, какие потоки все еще запущены
ответ
jVisualVM является вашим другом для этого вида отладки. Он находится в каталоге/bin вашего JDK-установки. Показывает все потоки как графическое представление и позволяет вам развернуть то, что они делают. Кнопка Thread Dump
распечатает все свои текущие трассировки стека, чтобы вы могли увидеть, что-то застряло где-то в вашем пользовательском коде.
+1 JVisualVM - отличный инструмент. Я предпочитаю JConsole для изучения отдельных потоков, но функция Dump Dump JVisualVM отличная. Я бы хотел, чтобы он сбрасывал его на дисплей, который позволял искать/выделять текст. – 2010-12-06 23:30:16
Я использую fgrep для поиска текста. Например, jstack
@Tim: Да. Я просто копирую/вставляю дамп в свой текстовый редактор. – 2010-12-06 23:52:25
Используйте инструмент командной строки «jps», чтобы увидеть активные java-процессы и jstack для отображения активных потоков.
Если вы ищете программное решение, что-то вроде этого (в JDK 1.5 или более поздняя версии) должно работать:
Map<Thread, StackTraceElement[]> stack = Thread.getAllStackTraces();
for (Map.Entry<Thread, StackTraceElement[]> entry : stack.entrySet()) {
System.out.println("Thread named '" +
entry.getKey().getName() +
"' is alive");
}
После ответа, Темпус-Fugit nogudnik имеет программный дамп потоков (и тупиковое обнаружение), см. http://tempusfugitlibrary.org/documentation/threading/dumps/
«Кажется, что один или несколько потоков, которые случайно не прерывались». Я не сказал, что вещи не прерывались. Вызов Thread.interrupt() не приводит к остановке runnable. Он устанавливает флаг прерывания и, возможно, вызывает блокирующие операции (например, вызовы Thread.sleep или java.nio), чтобы вызывать исключение InterruptedException или какое-либо другое исключение (например, ClosedByInterruptException для nio). Ваши runnables должны проверить Thread.currentThread(). IsInterrupted() и вести себя красиво.
- 1. Процесс Zombie, хотя потоки все еще запущены
- 2. Почему все еще запущены процессы SQL Server?
- 3. Как заблокировать новые потоки, пока не будут созданы и запущены все потоки
- 4. Какие Java-API создают потоки
- 5. Тема, создающая еще Темы
- 6. Посмотрите, какие проблемы изменились.
- 7. Все темы при запуске java-проекта
- 8. QWaitCondition: Разрушено, пока потоки все еще ждут
- 9. OpenSessionInViewFilter и Wicket и все еще запущены в LazyInitializationExceptions
- 10. Контекст Android после операции завершен, а службы все еще запущены
- 11. servicestartarguments темы все еще работает после StopService
- 12. Java потоки для замены, если еще
- 13. Бесплатно все ожидаемые темы
- 14. Посмотрите, какие вызовы вызывает приложение?
- 15. Pyqt5 GUI все еще зависает при использовании темы
- 16. Java. Посмотрите, содержит ли строка какие-либо символы.
- 17. Можете ли вы убедиться, что все темы запущены с определенной культурой?
- 18. Java Multithread останавливая все другие темы сразу
- 19. Коды все еще запущены, когда нажата кнопка «Назад» или «Домой», Android
- 20. Python: потоки могут быть запущены только один раз
- 21. Темы: Почему все пользовательские потоки должны отображаться в поток ядра?
- 22. Потоки приложений vs Сервисные темы
- 23. пользовательские темы v.s. Ядровые потоки
- 24. Темы Java продолжают накапливаться
- 25. Если вы вызываете событие EventWaitHandle.Set() X раз, будет ли он передавать потоки X, если X потоки еще не запущены?
- 26. Netsuite: Как отследить, какие скрипты запущены?
- 27. Как получить Oracle, узнать, какие процедуры запущены?
- 28. Способ узнать, какие скрипты запущены на Apache
- 29. Пакет SSIS Какие учетные данные SSIS запущены?
- 30. Как узнать, какие запросы Django-MongoDB запущены?
Thread.isAlive()? – yurib 2010-12-06 23:21:53