ThreadDumpの内容をJavaのコード内で扱う
[twitter:@making]さんにおしえてもらいました。
code
public static void main(String... args) { java.util.List<java.lang.management.ThreadInfo> threadInfos = java.util.Arrays.asList(java.lang.management.ManagementFactory.getThreadMXBean().dumpAllThreads(true, true)); System.out.println(threadInfos); }
output
["Signal Dispatcher" Id=4 RUNNABLE
, "Finalizer" Id=3 WAITING on java.lang.ref.ReferenceQueue$Lock@15db9742
at java.lang.Object.wait(Native Method)
- waiting on java.lang.ref.ReferenceQueue$Lock@15db9742
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209)
, "Reference Handler" Id=2 WAITING on java.lang.ref.Reference$Lock@6d06d69c
at java.lang.Object.wait(Native Method)
- waiting on java.lang.ref.Reference$Lock@6d06d69c
at java.lang.Object.wait(Object.java:502)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:157)
, "main" Id=1 RUNNABLE
at sun.management.ThreadImpl.dumpThreads0(Native Method)
at sun.management.ThreadImpl.dumpAllThreads(ThreadImpl.java:446)
at threadinfotest.ThreadInfoTest.main(ThreadInfoTest.java:21)
]
クラスThreadInfo
https://docs.oracle.com/javase/jp/8/api/java/lang/management/ThreadInfo.html