jvm线程是维护了线程的状态。new,running,waiting,timed waiting,blocked,terminated。我们通过jstack等工具查看的时候,线程状态就是上面的一种。jvm本身是做了一种抽象,我们现在从一个典型的方法,来跟踪查看一下jvm内部又是怎么做状态变化的。

sleep方法入手
public static native void sleep(long millis) throws InterruptedException;
sleep是一个native 方法,我们通过jvm原来来进行跟着(源码来自openjdk11)。根据jni的规范,我们通过包名或者是jni的注册方式找到了对应的声明。
static JNINativeMethod methods[] = {
{"start0", "()V", (void *)&JVM_StartThread},
{"stop0", "(" OBJ ")V", (void *)&JVM_StopThread},
{"isAlive", "()Z", (void *)&JVM_IsThreadAlive},
{"suspend0", "()V", (void *)&JVM_SuspendThread},
{"resume0", "()V", (void *)&JVM_ResumeThread},
{"setPriority0", "(I)V", (void *)&JVM_SetThreadPriority},
{"yield",

本文从sleep方法入手,探讨JVM线程的状态变化。通过分析JVM_Sleep方法,揭示了JavaThread对象如何代表JVM线程状态,包括_thread_in_vm, _thread_in_native和SLEEPING状态。Jstack工具显示的timed_waiting(sleep)状态,实际上是由于格式化输出的结果。总结了JVM中三种线程状态:Java规范状态、JVM代理的系统线程状态和JVM内部转换状态。"
79807560,7539379,f2fs文件系统初始化详解,"['文件系统', 'f2fs', '系统初始化']
最低0.47元/天 解锁文章
831

被折叠的 条评论
为什么被折叠?



