上QQ阅读APP看书,第一时间看更新
1.2.2 使用常见的3个命令分析线程的信息
可以在运行的进程中创建线程,如果想查看这些线程的状态与信息,则可采用3种常见的命令,分别是jps+jstack.exe、jmc.exe和jvisualvm.exe,它们在jdk\bin文件夹中。
创建测试用的程序并运行,代码如下:
package test.run; public class Run3 { public static void main(String[] args) throws InterruptedException { for (int i = 0; i < 5; i++) { new Thread() { public void run() { try { Thread.sleep(500000); } catch (InterruptedException e) { e.printStackTrace(); } }; }.start(); } } }
1)采用第1种方式查看线程的状态。使用jps+jstack.exe命令,在cmd中输入jps命令查看Java进程,其中进程id是13824的就是当前运行类Run3对应的Java虚拟机进程,然后使用jstack命令查看该进程下线程的状态,命令如下:
C:\>cd jdk1.8.0_161 C:\jdk1.8.0_161>cd bin C:\jdk1.8.0_161\bin>jps 13824 Run3 8328 Jps C:\jdk1.8.0_161\bin>jstack -l 13824
按Enter键后就可以看到线程的状态。
2)采用第2种方式查看线程的状态。使用jmc.exe命令,双击jmc.exe命令出现如图1-9所示界面。
图1-9 命令jmc.exe的欢迎界面
关闭欢迎界面后双击Run3进程,再双击“MBean服务器”,然后点击“线程”标签页,出现如图1-10所示界面。
图1-10 线程列表
在列表中可以看到5个线程的名称与状态。
注意
如果在jmc.exe中看不到JVM进程,说明jmc.exe和IDE使用的JDK版本不一致。系统中存在多个版本的JDK,需要将path环境变量中使用的JDK版本和IDE中使用的JDK版本保持一致。建议在path环境变量中调整所使用的jdk/bin的路径。另外JMC(JDK Mission Control)在新版的JDK中不再默认提供,它已经成为一个独立的软件,需要到Oracle官方单独下载。
3)采用第3种方式查看线程的状态。使用jvisualvm.exe命令,双击jvisualvm.exe命令,出现如图1-11所示界面。
双击“Run3”进程,再点击“线程”标签页后就看到了5个线程,如图1-12所示。
线程的状态可以通过不同状态对应的不同颜色来一一判断。