thread.start() 的底层实现

954 阅读1分钟

thread.start()的调用关系图

thread.start()的调用关系图

具体调用的函数

// java/lang/Thread.java

public synchronized void start() {
    ...
    start0();
    ...
}
// jdk/.../src/share/native/java/lang/Thread.c

static JNINativeMethod methods[] = {
    {"start0", "()V", (void *)&JVM_StartThread},
    ..., 
};
//
JVM_ENTRY(void, JVM_StartThread(JNIEnv* env, jobject jthread))
    ...
    native_thread = new JavaThread(&thread_entry, sz);
    Thread::start(native_thread);
    ...
JVM_END
static void thread_entry(JavaThread* thread, TRAPS) {
  ...
  JavaCalls::call_virtual(...
                          vmSymbols::run_method_name(),
                          ...);
}