生成されたスレッド側の処理の流れは以下のようになる.
実行が開始されると java_start() 関数から処理が始まる.
java_start() からは最終的に Thread::run() が呼び出される.
(なお, java_start() は各 OS 毎に実装されている. ただし, どの場合でも最終的には Thread::run() に行き着く)
java_start()
-> (1) LWP 関係の設定
-> _lwp_self()
-> OSThread::set_lwp_id()
(1) NUMA 関係の設定
-> os::numa_get_group_id()
-> Thread::set_lgrp_id()
(1) スレッドの優先度の設定
-> os::set_native_priority()
(1) シグナルマスクの設定
-> os::Solaris::hotspot_sigmask()
-> (See: here for details)
(1) 実際にこのスレッドのメイン処理を実行
-> Thread::run()
-> (Thread の各サブクラスでオーバーライドされた run() メソッドが呼び出される)
(1) 終了
-> thr_exit() (<= UseDetachedThreads オプションが指定されている場合には呼び出す.
この場合, スレッド自体が消えるのでここで実行は終了.
そうでなければ単にリターンすることで終了させる.)
See: here for details
See: here for details
(#TODO)
See: here for details
See: here for details
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.