スレッドの起動処理により Thread::run() が呼び出される (See: here for details). JavaThread は Thread::run() をオーバーライドしているので, 実際に呼び出されるのは JavaThraed::run() になる.
JavaThread::run() からは, 最終的に JavaThread オブジェクト生成時に指定された thread_entry() 関数が呼び出される. この thread_entry() 内でメインの処理を行う java.lang.Thread.run() が呼び出される.
-> JavaThread::run() -> (1) TLAB(ThreadLocalAllocBuffer) の初期化を行う. -> JavaThread::initialize_tlab() -> ThreadLocalAllocBuffer::initialize() (1) スタック領域関連のフィールドを初期化する. -> JavaThread::record_base_of_stack_pointer() (1) スタック領域関連のフィールドを初期化する. -> Thread::record_stack_base_and_size() (1) 現在実行中のネイティブスレッドに, この JavaThread オブジェクトを対応付ける. -> Thread::initialize_thread_local_storage() (1) カレントスレッドのスタック上に guard page を設定. -> JavaThread::create_stack_guard_pages() (1) プラットフォーム固有のフィールドを(もしそんなものがあれば)初期化. -> JavaThread::cache_global_variables() (1) カレントスレッドの JavaThreadState を _thread_new から _thread_in_vm に変更. -> ThreadStateTransition::transition_and_fence() (1) カレントスレッドの JNI ローカル参照フレームを作成. -> JNIHandleBlock::allocate_block() -> Thread::set_active_handles() (1) カレントスレッドのメイン処理(及びメイン処理終了後の後片付け処理)を行う. -> JavaThread::thread_main_inner() -> (1) カレントスレッドのメイン処理を実行する -> JavaThread::entry_point()() (JavaThread::entry_point() が thread_entry へのポインタを返し, それが呼び出される) これにより, コンストラクタ引数で渡されていた thread_entry() が呼び出される. -> thread_entry() -> JavaCalls::call_virtual() -> (See: here for details) -> java.lang.Thread.run() (ここで実際の処理が行われる. Thread のサブクラスを作った場合は, そちらでオーバライドした run() メソッドが呼ばれる. そうでなければ, java.lang.Thread.run() の中で, 登録した Runnable オブジェクトの run() メソッドが呼ばれる) (1) メイン処理終了後の後片付けを行う -> JavaThread::exit() -> (See: here for details)
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
(#Under Construction)
(#Under Construction)
(#Under Construction)
(#Under Construction)
(#Under Construction)
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
(#Under Construction)
(#Under Construction)
(#Under Construction)
(#Under Construction)
(#Under Construction)
See: here for details
See: here for details
See: here for details
(#Under Construction)
See: here for details
See: here for details
See: here for details
See: here for details
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.