利用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
原创粉丝点击