Thread

Thread とは、独立して動作する program の一部分という程度の意味です。 Thread 化された program は、program の他の部分と関係なく勝手に動いてく れなければいけません。 たとえば、以下の program は thread を使った例です。

Source

threadを使うには,最初の

public class なんたら extends java.applet.Applet
の次に
       implements Runnable
が必要です。 Runnable とは,他と独立に run する(走る)ような部分を持つということです。

threadは変数に入れて使います。そのために, Thread 型の変数をあらかじめ作っておきます。 その変数には,適当な名前を付けておきます。

threadは一つのprogram内でいくつ作ってもかまいません。 threadが複数ある場合には,

    Thread thread1, thread2;
のように,複数の変数を作る必要があります。

ここで作った Thread 型の変数は, 作られた当初は null という特別な値を持ちます。

Browserは,このappletを読み込むと, まずこの中の init() を実行し, 次に start() を実行します。 そして,この page を見終わって次の page に移るときは, applet の stop() を実行します。

そこで,start() ではthreadの実行を開始し, stop() ではthreadの実行を止めるのが普通です。

そこで,start() methodには次のようなことを書いておきます。

    public void start() {
        if (thread1 == null) {
            thread1 = new Thread(this);
            thread1.start();
        }
    }
これは,まだ thread1 が null(作られていない)なら, thread1 に新しい thread を代入するという意味です。 新しい thread を作るには、
    new Thread(this)
とします。

stop() では,これと逆に,

    public void stop() {
        if (thread1 != null) {
            thread1.stop();
            thread1 = null;
        }
    }
のようにします。つまり,念のため thread1 にthreadが代入されて いるかどうかチェックし,もし代入されている(null でない)なら, そのthreadを止め, 止まっていることがわかるように変数には null を代入します。

threadの実際に動く部分は, 必ず run() というmethod名にしておきます。 たとえば以下のようにです。

    public void run() {
        while (true) {
            try {
                Thread.sleep(100);  // sleep 100msec
            } catch (InterruptedException e) {
                break;
            }
            .......
            何らかの処理
            .......
            repaint();
        }
    }
}

この while (true) { ... } は無限ループです。 ただし,ループを回りっぱなしだと CPU が他の仕事をするのに支障が出る 場合があるので,毎回 Thread.sleep(100) を実行して, 100ミリ秒だけ休ませています。この間に CPU は他の仕事ができるわけです。

Thread.sleep() を実行している間に,他から割り込みがかかる ことがあります。その場合の処理を決めているのが

            try {
                Thread.sleep(100);  // sleep 100msec
            } catch (InterruptedException e) {
                break;
            }
という構文です。これは, Thread.sleep() を実行している間に割り込み(interrupt)がかかれば, break を実行する(つまり無限ループを脱出する)という意味です。 なお、thread を一時的に停止する suspend(), 停止した thread を再開させ るための suspend() という method も用意されています。