利用jstack查看线程运行状态

首先一段代码

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();
	}
	//一直在sleep
	static class Waiting implements Runnable{
		@Override
		public void run() {
			while(true){
				synchronized (Waiting.class){
					try {
						Waiting.class.wait();
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
		}
	}
	//线程一直在等待
	static class TimeWaiting implements Runnable{

		@Override
		public void run() {
			while(true){
				SleepUtils.second(100);
			}
		}
	}
	//线程得到锁后不会释放锁
	static class Blockd implements Runnable{

		@Override
		public void run() {
			synchronized(Blockd.class){
				while(true){
					SleepUtils.second(100);
				}
			}
		}
		
	}

}

首先打开dos命令,进入jdk安装目录

输入Jps获取当前进程信息

我的进程id是:10304

D:\jdk1.7.0_80\bin>Jps
10732
10304 P173ThreadState
9568 Jps

继续输入:jstack 10304(这是进程ID)

结果如下:可以看到每个线程的状态

D:\jdk1.7.0_80\bin>jstack 10304
2017-04-26 22:41:38
Full 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 condition

JNI global references: 107


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值