Java 线程的堆栈跟踪信息
Java 线程的堆栈跟踪信息,展示了线程的当前状态和执行位置。以下是详细解释:
线程基本信息
"Thread-0" #16 prio=5 os_prio=0 cpu=0.00ms elapsed=16.29s tid=0x00000243105a4130 nid=0x5384 waiting on condition [0x0000007687ffe000]
- 线程名称:
Thread-0
(由系统自动命名的线程) - 线程编号:
#16
(JVM 内部的唯一编号) - 优先级:
prio=5
(默认优先级,范围 1-10) - 操作系统优先级:
os_prio=0
(映射到操作系统的优先级) - CPU 时间:
cpu=0.00ms
(线程当前占用的 CPU 时间) - 运行时间:
elapsed=16.29s
(线程从启动到现在的总时间) - 线程 ID:
tid=0x00000243105a4130
(JVM 内部的线程唯一标识符) - 本地线程 ID:
nid=0x5384
(操作系统分配的线程 ID) - 线程状态:
waiting on condition
(正在等待某个条件触发) - 堆栈地址:
[0x0000007687ffe000]
(线程堆栈的内存地址)
线程状态信息
java.lang.Thread.State: TIMED_WAITING (sleeping)
- 线程状态:
TIMED_WAITING
(限时等待状态) - 具体原因:
sleeping
(线程正在执行Thread.sleep()
)
堆栈跟踪信息
at java.lang.Thread.sleep(java.base@17.0.13/Native Method)
at com.example.testThread.TestJoin$1.run(TestJoin.java:9)
- 第一行:线程正在执行
Thread.sleep()
方法(本地方法,由 JVM 实现) - 第二行:
TestJoin
类的内部类(TestJoin$1
)的run()
方法在第 9 行调用了sleep()
代码推测
根据堆栈信息,可以推测 TestJoin.java
的第 9 行代码类似:
public class TestJoin {public static void main(String[] args) {Thread t = new Thread(() -> {try {// 第9行:线程休眠1000毫秒Thread.sleep(1000); } catch (InterruptedException e) {e.printStackTrace();}});t.start();}
}
总结
- 线程状态:
Thread-0
正在休眠(TIMED_WAITING
),等待 1 秒后继续执行。 - 触发原因:代码中显式调用了
Thread.sleep()
方法。 - 常见场景:线程需要暂停执行一段时间(如定时任务、资源等待等)。