Я просто должен был ответить на тот же вопрос сам:)
Я могу признать, что потоки действительно очищаются после их завершения. Если вы не совсем уверены, что порожденные потоки когда-либо умрут, вы сможете отслеживать процесс и видеть, сколько потоков в данный момент запущено. Если число продолжает расти, что-то выходит из-под контроля.
В Unix-системе вы можете использовать команду ps
, но я ржавый, поэтому я спросил Google вместо чтения man-страницы.
Одним из первых обращений в Google было Этот скрипт, в котором перечислены темы для каждого процесса . Вывод выглядит так
PID TID CLS RTPRIO STAT COMMAND WCHAN
....
16035 16047 TS - S (java)
16035 16050 TS - S (java)
16035 16054 TS - S (java)
16035 16057 TS - S (java)
16035 16058 TS - S (java)
16035 16059 TS - S (java)
16035 16060 TS - S (java)
....
И я просто grep
вывод для идентификатора процесса (pid) процесса, который я хочу просмотреть и подсчитать количество строк, каждая из которых соответствует потоку. Как это:
morten@squeeze: ~$ sh /tmp/list_threads.sh | grep 16035 | wc -l
20
Итак, программа, которую я сейчас смотрю (PID 16035), имеет 20 запущенных потоков.
Это не требовало знания jconsole
или каких-либо изменений в коде. Последняя часть, вероятно, самая важная, так как я сам не написал программу, поэтому теперь мне не нужно читать и понимать программу.