生成されたスレッド側の処理の流れは以下のようになる.
実行が開始されると 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.