Java线程转储非常有助于分析应用程序中的问题、瓶颈和死锁情况。

方式一

在命令行中输入jvisualvm或运行JDK bin目录下的jvisualvm.exe打开Java VisualVM,右键正在运行的进程,选择线程 Dump

即可在右侧[threaddump]页签中看到类似如下的转储结果:

Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.45-b02 mixed mode):

"Worker-33" #732 prio=5 os_prio=0 tid=0x0000000016a7c000 nid=0x3760 in Object.wait() [0x000000003500f000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:188)
	- locked <0x00000000c0d87c18> (a org.eclipse.core.internal.jobs.WorkerPool)
	at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:220)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:52)

   Locked ownable synchronizers:
	- None

方式二

在命令行下使用jstack命令,用法如下:

jstack 10532 >> mydump.tdump

方式三

在命令行下使用jcmd命令,用法如下:

jcmd 10532 Thread.print >> mydump.tdump
参考资料:

Java Thread Dump