the state of the thread

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 command


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()
   #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: monitoring success
         8: goto          16
        11: astore_2
        12: aload_1
        13: monitoring
        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
}

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=326967855&siteId=291194637