Up Top

Thread の生死判定処理 (java.lang.Thread.isAlive() の処理)


処理としては, java.lang.Thread オブジェクト内の eetop フィールドの値を確認するだけ.


java.lang.Thread オブジェクトには eetop という private field があり, 対応する JavaThread オブジェクトのポインタが格納されている. スレッドが死亡すると, この eetop フィールドが NULL になる.

(なお, このフィールドへのアクセサは, java_lang_Thread::thread() と java_lang_Thread::set_thread())

(See: JavaThread::prepare(), ensure_join())

    ((cite: hotspot/src/share/vm/classfile/javaClasses.cpp))
    // Note: JDK1.1 and before had a privateInfo_offset field which was used for the
    //       platform thread structure, and a eetop offset which was used for thread
    //       local storage (and unused by the HotSpot VM). In JDK1.2 the two structures
    //       merged, so in the HotSpot VM we just use the eetop field for the thread
    //       instead of the privateInfo_offset.
    // Note: The stackSize field is only present starting in 1.4.

処理の流れ (概要)(Execution Flows : Summary)

JVM_IsThreadAlive() (= java.lang.Thread.isAlive())
-> java_lang_Thread::is_alive()
   -> java_lang_Thread::thread()
      -> oopDesc::address_field()  (java_lang_Thread::_eetop_offset を引数として呼び出す)

処理の流れ (詳細)(Execution Flows : Details)


See: here for details


java.lang.Thread.isAlive() は JVM_IsThreadAlive() で実装されている.

    ((cite: jdk/src/share/native/java/lang/Thread.c))
    static JNINativeMethod methods[] = {
        {"isAlive",          "()Z",        (void *)&JVM_IsThreadAlive},


See: here for details


See: here for details


(#Under Construction)

This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.