当线程对象调用了Thread.start(方法之后,该线程处于就绪状态,Java虚拟机会为其创建方法调用栈和程序计数器,处于这个状态的线程并没有开始运行,它只是表示该线程可以运行了。从start(源码中看出、start后添加到了线程列表中,接着在native层添加到VM中,至于该线程何时开始运行,取决于IVM里线程调度器的调度(如果OS调度选中了,就会进入到运行状态)。回看一下下面start方法源码:
java层---nativeCreate(this,stack Size,daemon)
C++层---的方法:
- static void Thread_nativeCreate(JNIEnv* env, jclass, jobject java_thread,
- jlong stack_size, jboolean daemon) {
- Thread:: CreateNativeThread(env, java_thread, stack_size, daemon == JNI_TRUE);
- }
最主要的一句就是C++ 方法Create NativeThread方法中的p_thread =pthread_create(...);
说说pthread._create的参数
原型:int pthread_create((pthread_t thread, pthread_attr_t *attr, void *(start_routine )
(void *), void *arg )