(一)启动vm thread
我们可以看到,在thread.cpp里启动了线程vm thread,在这里我们同时也稍微的略带的讲一下jvm在linux里如何启动线程的。
通常在linux中启动线程,是调用
而在java里却增加了os:create_thread --初始化线程 和os:start_thread--启动线程
我们去看一下jvm里面是如何在linux里做到的
在os_linux.cpp中来看create_thread的方法
继续看java_start方法
首先jvm先设置了当前线程的状态是Initialized, 然后notify所有的线程,
while (osthread->get_state() == INITIALIZED) {
sync->wait(Mutex::_no_safepoint_check_flag);
}
不停的查看线程的当前状态是不是Initialized, 如果是的话,调用了sync->wait()的方法等待。
来看os:start_thread的方法 os.cpp