Up Top

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


概要(Summary)

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

備考(Notes)

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)

JVM_IsThreadAlive()

See: here for details

備考(Notes)

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

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

java_lang_Thread::is_alive()

See: here for details

java_lang_Thread::thread()

See: here for details

oopDesc::address_field()

(#Under Construction)


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