Java多线程编程核心技术(第3版)
上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所示。

线程的状态可以通过不同状态对应的不同颜色来一一判断。