我使用多线程程序做一些工作。我在JConsole中看到我仍然有2个非守护程序线程,但我无法确切知道哪个(线程总数超过30)。 Visual VM不提供此类信息。
答案 0 :(得分:20)
执行命令
$ jstack PID | grep tid= | grep -v daemon
这将转储给定Java PID的所有线程,过滤具有线程名称的行并过滤掉非守护进程的那些。
删除-v
仅打印守护程序线程。
答案 1 :(得分:2)
在VisualVM中进行线程转储。守护程序线程在线程名称旁边有单词“daemon
”。
"Default RequestProcessor" daemon prio=1 tid=101e58000 nid=0x124d86000 runnable [124d85000]