java如何输出线程的标识符_图文演示:利用Java常见的命令分析线程的信息

查看java线程的状态和信息可采用3种常见命令,它们分别是jsp+jstack.exe、jmc.exe以及jvisualvm.exe。这些命令在jdk的bin目录中。

在演示之前,我们需要先创建一些线程,代码如下:

public class Thread01 {

public static void main(String[] args) {

for (int i = 0;i<3;i++) {

// New一个继承Thread的匿名类

new Thread() {

public void run() {

try {

// 让线程等待时间长一点

Thread.sleep(10000000);

} catch (Exception e) {

e.printStackTrace();

}

}

}.start();

}

}

}

1)采用jsp+jstack.exe命令查看线程信息。CMD的命令如下:

C:\Users\46614>cd C:\Program Files\Java\jdk1.7.0_80\bin

C:\Program Files\Java\jdk1.7.0_80\bin>jps

25804 Jps

11404 org.eclipse.equinox.launcher_1.3.100.v20150511-1540.jar

此时,我们还未发现Thread01创建的线程。因为我们还未执行Thread01。让我们Run as java application执行后,再执行jps、jstack.exe

C:\Program Files\Java\jdk1.7.0_80\bin>jps

20300 Jps

27420 Thread01

11404 org.eclipse.equinox.launcher_1.3.100.v20150511-1540.jar

C:\Program Files\Java\jdk1.7.0_80\bin>jstack -l 27420

2019-09-28 10:52:25

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

"DestroyJavaVM" prio=6 tid=0x0000000003412800 nid=0x2628 waiting on condition [0x0000000000000000]

java.lang.Thread.State: RUNNABLE

Locked ownable synchronizers:

- None

"Thread-2" prio=6 tid=0x000000000d67b000 nid=0x37c4 waiting on condition [0x000000000f17f000]

java.lang.Thread.State: TIMED_WAITING (sleeping)

at java.lang.Thread.sleep(Native Method)

at com.ityuan.thread.Thread01$1.run(Thread01.java:12)

Locked ownable synchronizers:

- None

"Thread-1" prio=6 tid=0x000000000d64d000 nid=0x4790 waiting on condition [0x000000000f07f000]

java.lang.Thread.State: TIMED_WAITING (sleeping)

at java.lang.Thread.sleep(Native Method)

at com.ityuan.thread.Thread01$1.run(Thread01.java:12)

Locked ownable synchronizers:

- None

"Thread-0" prio=6 tid=0x000000000d64c000 nid=0xe68 waiting on condition [0x000000000ef7f000]

java.lang.Thread.State: TIMED_WAITING (sleeping)

at java.lang.Thread.sleep(Native Method)

at com.ityuan.thread.Thread01$1.run(Thread01.java:12)

Locked ownable synchronizers:

- None

以上结果打印了3个线程的信息,并提示处于TIMED_WAITING状态(这里省略了线程其他的提示信息)

2)采用jmc.exe命令查看线程信息

在CMD的jdk\bin目录输入jmc如图(或直接找到jdk\bin目标jmc.exe双击打开)

68301058af3e12671c2bec1539e102ee.png关闭欢迎使用选卡,点击左边对应MBean服务器及右边的线程选卡,即可看到对应的线程信息。

e3f9492c5cd7a35286080ff3d8af0275.png3)采用jvisualvm.exe命令查看线程信息

在CMD的jdk\bin目录输入jvisualvm如图(或直接找到jdk\bin目标jvisualvm.exe双击打开)

393bfddfa7fa55a1ca0eafd4c3c34218.png打开线程选卡,查看线程信息

9bea8865310e09e4fce6a5aec50ae0fb.png实际生产环境发生线程问题时,使用jvisualvm.exe分析线程、线程内存占用,来排查问题的情况比较多。例如内存分析:

bd8fa90cac24347378581512de6b4dc1.png

作者采用IT猿同步助手一键多平台发布,查看原文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值