Top


定義場所(file name)

hotspot/src/share/vm/runtime/thread.cpp

名前(function name)

void JavaThread::thread_main_inner() {

本体部(body)

  {- -------------------------------------------
  (1) (assert)
      ---------------------------------------- -}

      assert(JavaThread::current() == this, "sanity check");
      assert(this->threadObj() != NULL, "just checking");

  {- -------------------------------------------
  (1) JavaThread::entry_point() でエントリポイントを取得し, そのエントリポイントを呼び出す.

      (ただし, この時点で例外が起こっている場合には, この処理は行わない)
      (また, java_lang_Thread::is_stillborn() が true を返す場合にも, この処理は行わない.
       これは, このスレッドに対して既に java.lang.Thread.stop() が呼ばれている場合.
       java.lang.Thread.stop() は例外を起こすので, ある意味では上のケースの特殊例.
       See: java.lang.Thread.stop())
      ---------------------------------------- -}

      // Execute thread entry point unless this thread has a pending exception
      // or has been stopped before starting.
      // Note: Due to JVM_StopThread we can have pending exceptions already!
      if (!this->has_pending_exception() &&
          !java_lang_Thread::is_stillborn(this->threadObj())) {
        HandleMark hm(this);
        this->entry_point()(this, this);
      }

  {- -------------------------------------------
  (1) (DTrace のフック点)
      ---------------------------------------- -}

      DTRACE_THREAD_PROBE(stop, this);

  {- -------------------------------------------
  (1) JavaThread::exit() を呼んで, このスレッドに関する後片付けを行う.
      ---------------------------------------- -}

      this->exit(false);

  {- -------------------------------------------
  (1) この JavaThread オブジェクトを解放して終了.
      ---------------------------------------- -}

      delete this;
    }

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