Java 线程的堆栈跟踪信息

发布于:2025-05-13 ⋅ 阅读:(12) ⋅ 点赞:(0)

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(线程从启动到现在的总时间)
  • 线程 IDtid=0x00000243105a4130(JVM 内部的线程唯一标识符)
  • 本地线程 IDnid=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() 方法。
  • 常见场景:线程需要暂停执行一段时间(如定时任务、资源等待等)。

网站公告

今日签到

点亮在社区的每一天
去签到