利用jstack查看线程运行状态
来源:互联网 发布:综琼瑶 知君用心 编辑:程序博客网 时间:2024/06/07 03:20
首先一段代码
public class P173ThreadState {public static void main(String[] args) {new Thread(new TimeWaiting(),"TimeWaitingThread").start();new Thread(new Waiting(),"WaitingThread").start();//两个线程一个会一获取锁,另一个一直被block,阻塞new Thread(new Blockd(),"BlockThread-1").start();new Thread(new Blockd(),"BlockThread-2").start();}//一直在sleepstatic class Waiting implements Runnable{@Overridepublic void run() {while(true){synchronized (Waiting.class){try {Waiting.class.wait();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}}//线程一直在等待static class TimeWaiting implements Runnable{@Overridepublic void run() {while(true){SleepUtils.second(100);}}}//线程得到锁后不会释放锁static class Blockd implements Runnable{@Overridepublic void run() {synchronized(Blockd.class){while(true){SleepUtils.second(100);}}}}}
首先打开dos命令,进入jdk安装目录
输入Jps获取当前进程信息
我的进程id是:10304
D:\jdk1.7.0_80\bin>Jps1073210304 P173ThreadState9568 Jps
继续输入:jstack 10304(这是进程ID)
结果如下:可以看到每个线程的状态
D:\jdk1.7.0_80\bin>jstack 103042017-04-26 22:41:38Full thread dump Java HotSpot(TM) 64-Bit Server VM (24.80-b11 mixed mode):"DestroyJavaVM" prio=6 tid=0x0000000002e10800 nid=0x1858 waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE"BlockThread-2" prio=6 tid=0x0000000008d63000 nid=0x2574 waiting for monitor entry [0x000000000aeaf000] java.lang.Thread.State: BLOCKED (on object monitor) at com.yao.book.P173ThreadState$Blockd.run(P173ThreadState.java:48) - waiting to lock <0x00000000eb4f1c10> (a java.lang.Class for com.yao.book.P173ThreadState$Blockd) at java.lang.Thread.run(Unknown Source)"BlockThread-1" prio=6 tid=0x0000000008d60000 nid=0x2b64 waiting on condition [0x000000000adaf000] java.lang.Thread.State: TIMED_WAITING (sleeping) at java.lang.Thread.sleep(Native Method) at java.lang.Thread.sleep(Unknown Source) at java.util.concurrent.TimeUnit.sleep(Unknown Source) at com.yao.book.SleepUtils.second(SleepUtils.java:8) at com.yao.book.P173ThreadState$Blockd.run(P173ThreadState.java:48) - locked <0x00000000eb4f1c10> (a java.lang.Class for com.yao.book.P173ThreadState$Blockd) at java.lang.Thread.run(Unknown Source)"WaitingThread" prio=6 tid=0x0000000008d59000 nid=0x234 in Object.wait() [0x000000000acae000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x00000000eb4f0160> (a java.lang.Class for com.yao.book.P173ThreadState$Waiting) at java.lang.Object.wait(Object.java:503) at com.yao.book.P173ThreadState$Waiting.run(P173ThreadState.java:22) - locked <0x00000000eb4f0160> (a java.lang.Class for com.yao.book.P173ThreadState$Waiting) at java.lang.Thread.run(Unknown Source)"TimeWaitingThread" prio=6 tid=0x000000000a6f3000 nid=0x283c waiting on condition [0x000000000abae000] java.lang.Thread.State: TIMED_WAITING (sleeping) at java.lang.Thread.sleep(Native Method) at java.lang.Thread.sleep(Unknown Source) at java.util.concurrent.TimeUnit.sleep(Unknown Source) at com.yao.book.SleepUtils.second(SleepUtils.java:8) at com.yao.book.P173ThreadState$TimeWaiting.run(P173ThreadState.java:37) at java.lang.Thread.run(Unknown Source)"Service Thread" daemon prio=6 tid=0x0000000008d43800 nid=0x1814 runnable [0x0000000000000000] java.lang.Thread.State: RUNNABLE"C2 CompilerThread1" daemon prio=10 tid=0x0000000008d31000 nid=0x20cc waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE"C2 CompilerThread0" daemon prio=10 tid=0x0000000008d2f000 nid=0x14a4 waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE"Attach Listener" daemon prio=10 tid=0x0000000008d2e000 nid=0x9a0 waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE"Signal Dispatcher" daemon prio=10 tid=0x0000000008d2b000 nid=0x1ea0 runnable [0x0000000000000000] java.lang.Thread.State: RUNNABLE"Finalizer" daemon prio=8 tid=0x0000000008cdf000 nid=0x10f4 in Object.wait() [0x000000000a0af000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x00000000eb404858> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(Unknown Source) - locked <0x00000000eb404858> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(Unknown Source) at java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source)"Reference Handler" daemon prio=10 tid=0x0000000008cd4800 nid=0x1488 in Object.wait() [0x0000000009faf000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x00000000eb404470> (a java.lang.ref.Reference$Lock) at java.lang.Object.wait(Object.java:503) at java.lang.ref.Reference$ReferenceHandler.run(Unknown Source) - locked <0x00000000eb404470> (a java.lang.ref.Reference$Lock)"VM Thread" prio=10 tid=0x0000000008cd0800 nid=0x4fc runnable"GC task thread#0 (ParallelGC)" prio=6 tid=0x0000000002e27000 nid=0x1ae0 runnable"GC task thread#1 (ParallelGC)" prio=6 tid=0x0000000002e28800 nid=0x2578 runnable"GC task thread#2 (ParallelGC)" prio=6 tid=0x0000000002e2a800 nid=0x2f18 runnable"GC task thread#3 (ParallelGC)" prio=6 tid=0x0000000002e2c000 nid=0x19a8 runnable"VM Periodic Task Thread" prio=10 tid=0x0000000008d4c800 nid=0x19b8 waiting on conditionJNI global references: 107
0 0
- 利用jstack查看线程运行状态
- linux查看线程状态--jstack
- java指令-jstack查看当前程序线程状态
- 使用jstack查看当前进程全部线程的状态
- jstack 线程状态
- jstack线程状态分析
- 使用jstack 查看线程
- jstack 查看线程栈
- 查看线程的运行状态
- JAVA 线程死锁,以及linux 命令和jstack 命令 查看线程死锁状态信息
- JAVA 线程死锁,以及linux 命令和jstack 命令 查看线程死锁状态信息
- jstack Dump 日志文件中的线程状态
- jstack Dump 日志文件中的线程状态
- jstack Dump 日志文件中的线程状态
- jstack Dump 日志文件中的线程状态
- Jstack线程状态BLOCKED/TIMED_WAITING/WAITING解释
- jstack Dump 日志文件中的线程状态
- 如何使用jstack分析线程状态
- 51nod1287【线段树+折半搜索】
- 程序的算取
- 浮点数初探及C++类型转换规则
- ADO.NET入门教程(三) 连接字符串,你小觑了吗?
- 10539
- 利用jstack查看线程运行状态
- 二、opencv的滑块使用
- ADO.NET入门教程(四) 品味Connection对象
- 机器学习 监督学习和无监督学习
- Numpy 学习
- @RequestParam注解的使用
- 越狱开发准备工作
- Arduino与ESP8266进行串口通信
- 使用ubuntu16.04