マルチスレッド

1つのプログラム上で,あたかも複数の処理が同時進行しているように見せる仕組み
  1. Threadクラス
  2. プログラム例
  3. 課題


Threadクラス

Threadクラス

スレッドの実行過程

  1. スレッドをオブジェクトとして生成する(new)
  2. startメソッドを呼び出すことでスレッドの実行を開始する
    • startメソッドは内部で自動的にrunメソッドを呼び出す
  3. runメソッドが終了するとスレッドの実行が終わる

スレッド上での実行に必要なメソッド


プログラム例

2つのスレッドを並行して実行する. 各スレッドは毎回の繰り返しの途中で,それぞれ1000ミリ秒,および, 2000ミリ秒のあいだ処理を休止する.


import java.util.*;

public class ThreadDemo extends Thread {
    int stime;

    // コンストラクタ
    public ThreadDemo(String str, int time) {
        setName(str);
        stime = time;
    }

    // 現在の時刻を返す    
    private String showClock() {
        Calendar clock = Calendar.getInstance();
        String now = clock.get(clock.HOUR_OF_DAY) + "時"
                   + clock.get(clock.MINUTE) + "分"
                   + clock.get(clock.SECOND) + "秒";
        return now;
    }

    //  スレッド上での処理する内容
    public void run() {
        for(int i = 0; i < 10; i++) {
            System.out.println(getName() + " " + (i+1) + "回目\t"
	                       + showClock());
            try {
                sleep(stime);    // stime[ミリ秒]のあいだ処理を休止する
            } catch(InterruptedException e) {}
        }
        System.out.println(getName() + " 終了\t"
                              + showClock());
    }

    public static void main(String[] args) {
        Thread t1 = new ThreadDemo("スレッド1", 1000); // sleepタイムを1秒に設定
        Thread t2 = new ThreadDemo("スレッド2", 2000); // sleepタイム 2秒
	t1.start(); // スレッド1の実行を開始
	t2.start(); // スレッド2の実行を開始
    }
}


演習問題

スレッドの数を変えたり,休止時間を変えるなどして, 上の例題に示したプログラムの動作を確認する.

NetBeansIDE上での作成と実行

  1. 新規にプロジェクトを作成する
    • カテゴリ: Javaアプリケーション・プロジェクト
    • プロジェクト名:  ThreadDemo
    • [注意] 「メイン・クラスの作成」にチェックを入れておく


スレッドの利用方法

GUIを利用するプログラムでは,既に, extends JFrame などと,GUIクラスを拡張して新しいクラスを作成する.

このためスレッドの利用方法には Thread クラスを拡張する方法と Runnable インターフェースを利用する方法 がある.