「スレッド」という用語は Java言語だけのものではありません。
最近の OS の基本概念の1つです。
簡単に説明すると、1つのプログラムをさらに細かい仕事の単位に分けたものです。
複数のスレッドによって処理の並列化を上手に実現すると、
プログラムの実行効率を上げることが可能になります。
既に紹介した例では、
ネットワークを通じて画像データを読んでいる間に他の処理を進めました。
ユーザーの入力を待つ間に、他の処理を行うなどの工夫も考えられます。
スレッドの導入は、
プログラムを設計する上でも大きな手助けになります。
とりわけマルチメディアを扱うアプリケーションの場合、
単独のプログラムで複数の入出力を同時に処理しなくてはいけません。
開発言語がスレッドへのインターフェイスをサポートしてくれれば、
こうしたのプログラムを自然な形で実現することができます。
Runnableインターフェイスをインプリメントしたアプレットの中では
Threadのオブジェクトを最低1つ新しく用意します。
public class Clock extends Applet implements Runnable {
public Thread clock = null; // スレッドの宣言
:
Threadクラスのオブジェクトをコンストラクタによって生成する場合、 引数として run() メソッドを内部にインプリメントされた オブジェクト(すなわちアプレット自身)を与える必要があります。 この仕事はアプレットの start() メソッド か mouseDonw() メソッドの中で行うのが適当でしょう。
clock = new Thread( this );
これでスレッドと、 アプレットで定義された run()メソッドの処理とが結びつけられたことになります。 これ以降のスレッドの処理のコントロールは、 すべて Threadクラスのオブジェクト(上の例では clock )を 通じて行われます。
スレッドをコントロールするためのThreadのメソッドには、
次のようなものがあります。
| メソッド名 | 機能 |
|---|---|
| start() | スレッドの処理を開始させる |
| stop() | スレッドの処理を停止させる |
| isAlive() | スレッドが活動中か判定する |
| sleep() | 現在のスレッドの処理を一時的に停止させる 引数は休憩する時間(ミリ秒単位) |
これらのメソッドの使用法は、半ばパターン化されています。 Threadクラスの start()は、アプレットの start() メソッドか マウスのイベント処理のメソッドの中で呼び出します。 アプレットの start() メソッドから呼び出せば、 ページに登場した時からスレッドの処理が始まります。 たとえばアニメーションを最初から動かしたり、 上のサンプルの時計のような場合は、このパターンになります。 もし時計ではなく「ストップ・ウォッチ」であれば、 mouseDown() のメソッドの中でスレッドを起動した方がいいでしょう。 Threadクラスの stop() も同様で、 アプレットの stop()メソッドか マウスのイベント処理のメソッドの中から呼び出します。 Threadクラスの sleep() メソッドは、run()メソッドの中で呼び出すのが普通です。 また Thread のオブジェクトを完全に消滅させたい時は、 他のクラスのオブジェクト同様、値に null を代入します。