スレッドの起動処理により 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.