スレッドのライフサイクル

Revised: Mar./23rd/2002

スレッドの概要

スレッドは、 Runnable インタフェースの実装クラス型オブジェクトとして作成します。これをスレッドとして実行する場合は、 run() メソッドを実装して、 Thread クラスにコンストラクタ引数として受け渡すか、そもそも Thread クラスの継承として作成します。「この Runnable なオブジェクトをスレッドとして実行してくれ」と言って Thread クラス型オブジェクトに委譲するか、自分自身スレッドとして実行可能にしておくかの違いです。

Thread クラスはスレッドを操作するための基本的なメソッドを沢山実装しています。本節では、それらのメソッドを用いて、スレッドを操作する方法を紹介します。

スレッドのライフサイクル

前節では、スレッドが、作成/実行可能/実行中/死の状態を遷移することを見てきました。

Thread クラスをインスタンス化することでスレッドが作成され、このオブジェクトの start() メソッドが呼ばれて実行可能になり、適時に run() メソッドが実行され、終了してこのスレッドを開始したスレッドへ制御が戻ってきます。

本節では、 Thread クラスのメソッドを用いて、ライフサイクルを明示的に操作してみます。

これらのメソッドは、スレッドをある程度明示的に操作して、状態を遷移させます。しかし、他のスレッドとの協調的な動作ではなく、あくまでも単体のスレッド自身が動作に責任を負う形になります。

これに対して、他のスレッドの作業の終了などのシグナルを受け取ってスレッドの状態を操作することが可能です。このように、他のスレッドと協調することを同期 (synchronous) 、上で紹介したメソッドのように協調しないことを非同期 (asynchronous) と呼びます。

マルチスレッドプログラミングで、データを共有する場合などは、スレッド間で同期をとる必要があります。

本稿では、非同期のスレッドの説明に続いて、スレッドの同期に関する事項の説明をする。



Copyright © 2002 SUGAI, Manabu. All Rights Reserved.