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