线程的状态


package com.laifeng.ideatest;

/**
* Created by wangqiao on 2016/3/29.
*/
public class ThreadState {
public static void main(String[] args) {
new Thread(new TimeWaiting(), "TimeWaitingThread").start();
new Thread(new Waiting(), "WaitingThread").start();
new Thread(new Blocked(), "BlockedThread-1").start();
new Thread(new Blocked(), "BlockedThread-2").start();
}

static class TimeWaiting implements Runnable {

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

static class Waiting implements Runnable {

@Override
public void run() {
while (true) {
synchronized (Waiting.class) {
try {
Waiting.class.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}

static class Blocked implements Runnable {

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

}



$ jstack 7404
2016-03-29 16:03:33
Full thread dump Java HotSpot(TM) 64-Bit Server VM (24.65-b04 mixed mode):

"DestroyJavaVM" prio=6 tid=0x000000000200f800 nid=0x2630 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE

"BlockedThread-2" prio=6 tid=0x000000000c0bb800 nid=0x1c0c waiting for monitor entry [0x000000000cbef000]
java.lang.Thread.State: BLOCKED (on object monitor)
at com.laifeng.ideatest.ThreadState$Blocked.run(ThreadState.java:46)
- waiting to lock <0x00000007d5d87d70> (a java.lang.Class for com.laifeng.ideatest.ThreadState$Blocked)
at java.lang.Thread.run(Thread.java:745)

"BlockedThread-1" prio=6 tid=0x000000000c0c9800 nid=0x2da0 waiting on condition [0x000000000d08f000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleep(Native Method)
at java.lang.Thread.sleep(Thread.java:340)
at java.util.concurrent.TimeUnit.sleep(TimeUnit.java:360)
at com.laifeng.ideatest.SleepUtils.second(SleepUtils.java:11)
at com.laifeng.ideatest.ThreadState$Blocked.run(ThreadState.java:46)
- locked <0x00000007d5d87d70> (a java.lang.Class for com.laifeng.ideatest.ThreadState$Blocked)
at java.lang.Thread.run(Thread.java:745)

"WaitingThread" prio=6 tid=0x000000000c0c5000 nid=0x1828 in Object.wait() [0x000000000cefe000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000007d5d85308> (a java.lang.Class for com.laifeng.ideatest.ThreadState$Waiting)
at java.lang.Object.wait(Object.java:503)
at com.laifeng.ideatest.ThreadState$Waiting.run(ThreadState.java:31)
- locked <0x00000007d5d85308> (a java.lang.Class for com.laifeng.ideatest.ThreadState$Waiting)
at java.lang.Thread.run(Thread.java:745)

"TimeWaitingThread" prio=6 tid=0x000000000c0c4800 nid=0x2424 waiting on condition [0x000000000ccef000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleep(Native Method)
at java.lang.Thread.sleep(Thread.java:340)
at java.util.concurrent.TimeUnit.sleep(TimeUnit.java:360)
at com.laifeng.ideatest.SleepUtils.second(SleepUtils.java:11)
at com.laifeng.ideatest.ThreadState$TimeWaiting.run(ThreadState.java:19)
at java.lang.Thread.run(Thread.java:745)

"Monitor Ctrl-Break" daemon prio=6 tid=0x000000000c0c7000 nid=0x2fc8 runnable [0x000000000ca4f000]
java.lang.Thread.State: RUNNABLE
at java.net.DualStackPlainSocketImpl.accept0(Native Method)
at java.net.DualStackPlainSocketImpl.socketAccept(DualStackPlainSocketImpl.java:131)
at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:398)
at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:199)
- locked <0x00000007d5e9b300> (a java.net.SocksSocketImpl)
at java.net.ServerSocket.implAccept(ServerSocket.java:530)
at java.net.ServerSocket.accept(ServerSocket.java:498)
at com.intellij.rt.execution.application.AppMain$1.run(AppMain.java:85)
at java.lang.Thread.run(Thread.java:745)

"Service Thread" daemon prio=6 tid=0x000000000bfb1000 nid=0x1378 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE

"C2 CompilerThread1" daemon prio=10 tid=0x000000000a9bf800 nid=0x2e98 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE

"C2 CompilerThread0" daemon prio=10 tid=0x000000000a9bb800 nid=0x1d78 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE

"Attach Listener" daemon prio=10 tid=0x000000000a9b9000 nid=0x2210 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE

"Signal Dispatcher" daemon prio=10 tid=0x000000000a9b2000 nid=0x1da0 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE

"Finalizer" daemon prio=8 tid=0x000000000a948000 nid=0x2e2c in Object.wait() [0x000000000bd3f000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000007d5c05608> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:135)
- locked <0x00000007d5c05608> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:151)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209)

"Reference Handler" daemon prio=10 tid=0x000000000a93e800 nid=0x2150 in Object.wait() [0x000000000bbef000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000007d5c05190> (a java.lang.ref.Reference$Lock)
at java.lang.Object.wait(Object.java:503)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:133)
- locked <0x00000007d5c05190> (a java.lang.ref.Reference$Lock)

"VM Thread" prio=10 tid=0x000000000a939000 nid=0x18ec runnable

"GC task thread#0 (ParallelGC)" prio=6 tid=0x000000000211e000 nid=0x2824 runnable

"GC task thread#1 (ParallelGC)" prio=6 tid=0x000000000211f800 nid=0x21f4 runnable

"GC task thread#2 (ParallelGC)" prio=6 tid=0x0000000002121800 nid=0x2b94 runnable

"GC task thread#3 (ParallelGC)" prio=6 tid=0x0000000002123000 nid=0x2c80 runnable

"VM Periodic Task Thread" prio=10 tid=0x000000000bfcb800 nid=0xe38 waiting on condition

JNI global references: 141



----------------------------------
javap 命令



public class Synchronized {
public static void main(String[] args) {
synchronized (Synchronized.class) {
}
m();
}

public static synchronized void m() {

}
}



wangqiao@D-F004829-PC /d/IDEA/idea_project_new/ideaTest/ideatest/target/classes/com/laifeng/ideatest
$ javap -v Synchronized.class
Classfile /d:/IDEA/idea_project_new/ideaTest/ideatest/target/classes/com/laifeng/ideatest/Synchronized.class
Last modified 2016-3-29; size 595 bytes
MD5 checksum 43d6f840cf7c20c64521bb22677f4106
Compiled from "Synchronized.java"
public class com.laifeng.ideatest.Synchronized
SourceFile: "Synchronized.java"
minor version: 0
major version: 51
flags: ACC_PUBLIC, ACC_SUPER
Constant pool:
#1 = Methodref #4.#23 // java/lang/Object."<init>":()V
#2 = Class #24 // com/laifeng/ideatest/Synchronized
#3 = Methodref #2.#25 // com/laifeng/ideatest/Synchronized.m:()V
#4 = Class #26 // java/lang/Object
#5 = Utf8 <init>
#6 = Utf8 ()V
#7 = Utf8 Code
#8 = Utf8 LineNumberTable
#9 = Utf8 LocalVariableTable
#10 = Utf8 this
#11 = Utf8 Lcom/laifeng/ideatest/Synchronized;
#12 = Utf8 main
#13 = Utf8 ([Ljava/lang/String;)V
#14 = Utf8 args
#15 = Utf8 [Ljava/lang/String;
#16 = Utf8 StackMapTable
#17 = Class #15 // "[Ljava/lang/String;"
#18 = Class #26 // java/lang/Object
#19 = Class #27 // java/lang/Throwable
#20 = Utf8 m
#21 = Utf8 SourceFile
#22 = Utf8 Synchronized.java
#23 = NameAndType #5:#6 // "<init>":()V
#24 = Utf8 com/laifeng/ideatest/Synchronized
#25 = NameAndType #20:#6 // m:()V
#26 = Utf8 java/lang/Object
#27 = Utf8 java/lang/Throwable
{
public com.laifeng.ideatest.Synchronized();
flags: ACC_PUBLIC
Code:
stack=1, locals=1, args_size=1
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
LineNumberTable:
line 6: 0
LocalVariableTable:
Start Length Slot Name Signature
0 5 0 this Lcom/laifeng/ideatest/Synchronized;

public static void main(java.lang.String[]);
flags: ACC_PUBLIC, ACC_STATIC
Code:
stack=2, locals=3, args_size=1
0: ldc_w #2 // class com/laifeng/ideatest/Synchronized
3: dup
4: astore_1
5: monitorenter
6: aload_1
7: monitorexit
8: goto 16
11: astore_2
12: aload_1
13: monitorexit
14: aload_2
15: athrow
16: invokestatic #3 // Method m:()V
19: return
Exception table:
from to target type
6 8 11 any
11 14 11 any
LineNumberTable:
line 8: 0
line 9: 6
line 10: 16
line 11: 19
LocalVariableTable:
Start Length Slot Name Signature
0 20 0 args [Ljava/lang/String;
StackMapTable: number_of_entries = 2
frame_type = 255 /* full_frame */
offset_delta = 11
locals = [ class "[Ljava/lang/String;", class java/lang/Object ]
stack = [ class java/lang/Throwable ]
frame_type = 250 /* chop */
offset_delta = 4


public static synchronized void m();
flags: ACC_PUBLIC, ACC_STATIC, ACC_SYNCHRONIZED
Code:
stack=0, locals=0, args_size=0
0: return
LineNumberTable:
line 15: 0
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值