Thread と Runnable の関係
今までのイベント処理などは、全て Appletクラスにあらかじめ用意されていた
機能を利用して実現しました。
ところが、
Appletクラス自体には
Thread を取り扱う機能は用意されていません!
class SlideImage extends Applet implements Runnable {
Thread slideThread=null; // 画像の移動を行うスレッド
:
:
implementsによって追加されるもの(ここでは Runnable という名前)
は、クラスではありません。
しかし、「あらかじめ用意されているクラスに似たデータ」と考えてください。
もう少し詳しく見てみましょう。
Runnableの内部には、データとして run()という名前の特別な関数
が用意されています。
この関数は Thread が実行する処理の内容になります。
Runnableによって追加されるのは、
Threadのデータではありません。
ですから、新しいアプレットの中で Threadクラスのデータを
新しく用意します。
Threadクラスのデータを生成する場合、
通常は run()関数を内部に implementされた
オブジェクトを引数として指定します。
slideThread = new Thread(this);
new Thread() はあるクラスの新しいデータを生成する時に用いる
Java言語での普通の書き方です。
引数に与えてるthisは重要なキーワードで、
「今作っているクラスのデータそのもの」を指します。
これによって、生成されたThreadは、このアプレットの内部で
再定義される関数 run()の中身の処理をコントロールすることになります。
Threadをコントロールする具体的な関数もまとめておきましょう。
「並列処理」と聞くと、当然何個もThreadを作りそうな気がします。
実際、そういう複雑なアプレットを設計することも可能です。
しかし、たいていの場合は、
「1つのアプレットに1つの Thread 」のパターンになります。
個々のアプレットが1つしかThreadの処理を持たなくても、
HotJavaが画面に表示するページ全体では
複数のThreadによって並列処理が行われることになります。
また、1つのアプレットの中でも run()内の処理と、
イベント処理とが並列処理されている点も忘れてはいけません。