Up Top

Thread の開始処理の枠組み


概要(Summary)

HotSpot 内で使われる多くの Thread クラスでは, 共通の開始処理が使われている.

この開始処理は, 大きく分けると以下の 2つからなる.

スレッドを作成する側の処理

  1. Thread オブジェクトの生成処理

スレッドは Thread クラスのサブクラスとして表現されている.

まず適切な Thread サブクラスのオブジェクトが生成される.

  1. スレッドを生成する処理

os::create_thread() を呼び出すと, 実際にスレッドの生成が行われる.

  1. 生成したスレッドの実行を開始させる処理

生成直後のスレッドは実行が停止されている.

os::start_thread() を呼ぶことで, 実際に実行が開始される.

生成されたスレッド側の処理

  1. 実行が開始されると java_start() 関数から処理が始まる.

  2. java_start() からは最終的に Thread::run() が呼び出される.

(なお, java_start() は各 OS 毎に実装されている. ただし, どの場合でも最終的には Thread::run() に行き着く)

  1. この Thread::run() は virtual function であり, 実際には Thread の各サブクラスでオーバーライドされた run() メソッドが実行される.

Subcategories


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