Thread

Threadクラスは Objectクラスの直接のサブ・クラスで、 Runnableをインプリメントしています。 java.langパッケージに含まれます。 Threadはスレッドとのインターフェイスを提供するクラスです。 スレッドをコントロールするメソッドを提供します。

Threadクラスのフィールド

Threadクラスには、スレッドの優先順位を表す定数が publicなフィールドとして 定義されています。

スレッドの優先度は MIN_PRIORTY(=1)から MAX_PRIORITY(=10) までの 数値で表されます。 特に指定しない場合のデフォルト値は NORM_PRIORITY(=5)が用いられます。

Threadクラスのメソッド

Threadクラスには、 引数の区別もすると 7個のコンストラクタと 30個余りのメソッドが定義されています。 メソッドの目的ごとに以下の項目のようにグループ分けして解説します。

  1. コンストラクタ
  2. スレッドの処理をコントロールするためのメソッド
  3. スレッドの状態をコントロールするためのメソッド
  4. システムによるスレッドの操作に関連するメソッド
  5. カレント・スレッドのコントロールを行う staticなメソッド
  6. スレッドのスケジュールを調べる staticなメソッド
  7. Threadのオブジェクト自身の情報を与えるメソッド
  8. その他のメソッド

コンストラクタ

コンストラクタに与えることができる引数は3種類あります。 それらの組み合わせで7種類の指定が可能です。 target は run()メソッドの実装を持つオブジェクトです。 run()メソッドの内容がスレッドの処理となります。 group は ThreadGroup のオブジェクトです。 Threadのオブジェクトをグループに所属させたい時に指定します。 name は Threadのオブジェクトに固有の名前を付けたい時に指定します。

スレッドの処理をコントロールするためのメソッド

start()メソッドは、オブジェクトに結びつけられた Runnableのオブジェクトに 実装された run()メソッドを呼び出し、スレッドの処理を開始します。 Threadのオブジェクト自身を Runnableのオブジェクトとした場合には、 run()メソッドに処理の内容を定義します。 stop()メソッドはスレッドの処理を停止させます。 suspend()メソッドは resume()メソッドが呼ばれるまで、 一時的にスレッドの処理を中断します。 join()メソッドは実行されているスレッドの処理が終わるのを、 引数に指定したタイムアウトの時間だけ待ち続けます。 第1引数はミリ秒単位の時間です。 さらに短い時間間隔を指定したい場合は、第2引数にナノ秒単位の時間を 指定することもできます。 (ただし現時点のマシンの能力では、指定してもほとんど無意味でしょう。) 引数を与えないと終了するまで永久に待ち続けます。

スレッドの状態をコントロールするためのメソッド

isAlive()はスレッドの処理が活動中であるかをチェックします。 start()メソッドが呼ばれてから、 stop()メソッドが呼ばれるまで isAlive()の値は trueです。 setPriority()およびgetPriority()は、スレッドの優先度の 設定および取得を行います。 getThreadGroup()メソッドは、スレッドが所属する ThreadGroup()を返します。
interrupt()はスレッドの処理に割り込みを行います。 isInterrupted()はスレッドに割り込みがかかったかどうかを判定します。

システムによるスレッドの操作に関連するメソッド

countStackFrames()メソッドは、Threadのオブジェクトが現在スタック上に 何個のフレームを持っているかを返します。 isDaemon()メソッドは、Threadのオブジェクトがシステムのものか ユーザーのものかを識別します。システムのものなら trueが返ります。 setDaemon()メソッドは、Threadの所属を設定します。trueならば Threadのオブジェクトはシステムのものとなり、false ならユーザーの ものとなります。全ての Threadのオブジェクトがシステムのものになった 時点で、プログラムの実行が終了したと判断されます。 checkAccess()メソッドは、カレント・スレッドが Threadのオブジェクトに 対するアクセス権限があるかどうかをセキュリティ・マネジャに問い合わせます。 アクセス権限がない場合は Exceptionを発生します。

カレント・スレッドのコントロールを行う staticなメソッド

カレント・スレッドとは、その瞬間に実行中のスレッドのことです。 (カレント・スレッドは常に1個しか存在しません。) Threadクラスにはカレント・スレッドをコントロールするための メソッドも提供されています。 これらは staticなメソッドで、 すべてのスレッドのオブジェクトによって共通して利用されます。
currentThread()メソッドは、 現在のカレント・スレッドのオブジェクトを返します。 yield()メソッドは現在のカレント・スレッドの処理を中断し、次のスレッド の処理に移ります。 sleep()メソッドはカレント・スレッドの処理を、 指定された時間だけ休ませます。第1引数はミリ秒単位で指定する休憩時間です。 さらに短い時間間隔を指定したい場合は、第2引数にナノ秒単位の時間を 指定することもできます。 (ただし現時点のマシンの能力では、指定してもほとんど無意味です。) sleep()メソッドは次のように使用することになります。

   try{ 
       Thread.sleep( 1000 );  // 現在の処理を1秒間中断
      }
   catch(InterruptedException e)
      {
       // エラー処理
      }
dumpStack()はデバッグ用のメソッドで、カレント・スレッドのスタックの状況を 出力します。
isInterrupted()はカレント・スレッドが割り込みを受けたかどうかを判定します。

スレッドのスケジュールを調べる staticなメソッド

他のスレッドの状況を知るためのメソッドも、 staticなメソッドとして提供されています。 activeCount()メソッドは、スレッド・グループ内のアクティブな スレッドの数を返します。 enumerate()メソッドは、スレッド・グループ内の全てのアクティブな Threadの状態のコピーを、引数に与えた配列に格納します。

Threadのオブジェクト自身の情報を与えるメソッド

setName()およびgetName()メソッドは、スレッドの名前の設定および取得を 行います。toString()メソッドは、スレッドの名前、優先度、グループに 関する情報を Stringクラスのオブジェクトとして返します。

その他のメソッド

ドキュメントには上記のメソッドは JDK1.0.2では機能を提供しないと書かれています。 ソースを見る限りでは、JDK 1.1.1でも、 依然としてこのメソッドの機能は提供されていないようです。