





















看《Java深度调试技术》,偷懒拍照的方式记录一些JVM线程堆栈中的基础概念解读。
线程状态的解读:
线程状态之间常见的转换路径:
给个示例:
public class Test { public static void main(String[] args) throws Exception { Object obj = new Object(); new TestThread_Locked(obj).start(); new TestThread_WaitingOn().start(); new TestThread_WaitingTo(obj).start(); } } public class TestThread_Locked extends Thread{ private Object lock; public TestThread_Locked(Object obj) { this.lock = obj; this.setName(this.getClass().getName()); } @Override public void run(){ func(); } private void func(){ synchronized (lock) { func_longTime(); } } private void func_longTime() { try { Thread.sleep(600000); } catch (Exception ex) { ex.printStackTrace(); } } } public class TestThread_WaitingOn extends Thread { private Object lock = new Object(); public TestThread_WaitingOn() { this.setName(this.getClass().getName()); } @Override public void run() { func(); } private void func() { synchronized (lock) { func_waitingOn(); } } private void func_waitingOn() { try { lock.wait(600000); } catch (Exception ex) { ex.printStackTrace(); } } } public class TestThread_WaitingTo extends Thread { private Object lock; public TestThread_WaitingTo(Object obj) { this.lock = obj; this.setName(this.getClass().getName()); } @Override public void run() { func(); } private void func(){ synchronized (lock) { func_longTime(); } } private void func_longTime() { try { Thread.sleep(600000); } catch (Exception ex) { ex.printStackTrace(); } } }
抓取线程堆栈如下:
Full thread dump OpenJDK 64-Bit Server VM (25.232-b09 mixed mode):
"com.example.cloudbus.TestThread_WaitingTo" #17 prio=5 os_prio=0 tid=0x0000017b82bed000 nid=0xa884 waiting for monitor entry [0x00000024b2afe000]
java.lang.Thread.State: BLOCKED (on object monitor)
at com.example.cloudbus.TestThread_WaitingTo.func(TestThread_WaitingTo.java:17)
- waiting to lock <0x000000076d3ad6c0> (a java.lang.Object)
at com.example.cloudbus.TestThread_WaitingTo.run(TestThread_WaitingTo.java:12)
"com.example.cloudbus.TestThread_WaitingOn" #16 prio=5 os_prio=0 tid=0x0000017b82bea000 nid=0x50cc in Object.wait() [0x00000024b29ff000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x000000076d3b43e0> (a java.lang.Object)
at com.example.cloudbus.TestThread_WaitingOn.func_waitingOn(TestThread_WaitingOn.java:22)
at com.example.cloudbus.TestThread_WaitingOn.func(TestThread_WaitingOn.java:16)
- locked <0x000000076d3b43e0> (a java.lang.Object)
at com.example.cloudbus.TestThread_WaitingOn.run(TestThread_WaitingOn.java:11)
"com.example.cloudbus.TestThread_Locked" #15 prio=5 os_prio=0 tid=0x0000017b82bc6800 nid=0xb734 waiting on condition [0x00000024b28ff000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleep(Native Method)
at com.example.cloudbus.TestThread_Locked.func_longTime(TestThread_Locked.java:22)
at com.example.cloudbus.TestThread_Locked.func(TestThread_Locked.java:17)
- locked <0x000000076d3ad6c0> (a java.lang.Object)
at com.example.cloudbus.TestThread_Locked.run(TestThread_Locked.java:12)
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。