jstack命令使用
jstack可用于导出java运用程序的线程堆栈,其基本使用语法为:
|
|
-l 打印关于锁的附加信息,例如属于java.util.concurrent的ownable synchronizers列表.
常用用法
下面这段代码运行之后会出现死锁现象(因为线程1持有lock1,在等待lock2,线程2持有lock2在等待lock1,造成了循环等待,形成死锁):
|
|
运行这段代码,然后使用jstack命令导出这个程序的线程堆栈信息:
|
|
打开导出的线程堆栈信息文件,文件末尾如下所示:
|
|
导出的线程堆栈文件中明确提示发现死锁,并且指明了死锁的原因。
jstack不仅能够导出线程堆栈,还能自动进行死锁检测,输出线程死锁原因。