■スレッド
スレッドとは、「道筋」や「糸」のような意味である。
プログラムの処理を実行する際、1度に1つの命令を実行していく処理をシングルスレッドと呼ぶ。
一方、1度に2つ以上の命令を同時に実行する処理をマルチスレッドと呼ぶ。
各スレッドは、独立して処理を進めるため、処理Aの後に処理Bを実行するなど、順序立てて実行したい場合は、「join」メソッドを使用する。
■作成するプログラムの概要
・Threadクラスを継承し、マルチスレッド処理を実装する。
・2つのクラスについて、10回、標準出力に文言を表示する。
なお、片方のクラスが終了した後、次の処理を実行させる。
■フローチャート
▼10回カウントクラス(スレッド継承)
▼メインクラス
■プログラム仕様
▼10回カウントクラス(スレッド継承)
処理名 | 10回カウントクラス(スレッド継承) |
---|---|
処理概要 | 標準出力へ10回、クラス名と回数を表示する。 ※「run」メソッドをオーバーライド |
引数 | なし |
戻り値 | なし |
入力 | 処理内容 | 出力 |
---|---|---|
– | ■ループ処理:10回繰り返す |クラス名、メソッド名、回数を出力する。・・・① ■ | ① 【標準出力】 クラス名 メソッド名 回数 |
▼メインクラス
処理名 | メインクラス |
---|---|
処理概要 | ・作成した「10回カウント」クラスを実行する。 ・「10回カウント」クラスの処理が完了した後、 標準出力へ10回、回数を表示する。 |
引数 | なし |
戻り値 | なし |
入力 | 処理内容 | 出力 |
---|---|---|
– | 作成したThreadクラスをインスタンスする。 | – |
– | Threadクラスを開始する。 | – |
– | 【try】 |「10回カウント」クラスの処理が完了するのを待つ 【catch】 |例外エラーを出力する。 | 【標準出力】 例外エラー |
– | ■ループ処理:10回繰り返す |クラス名、メソッド名、回数を出力する。・・・① ■ | ① 【標準出力】 クラス名 メソッド名 回数 |
■サンプルコード
// Threadクラスを継承
class TenCountThread extends Thread{
// runメソッドをオーバーライド
public void run() {
// 10回繰り返す
for (int i = 0; i < 10; i++) {
// 処理回数を出力
System.out.println("TenCountThreadクラスのrunメソッド:" + i );
}
}
}
public class ThredJoin {
public static void main(String[] args) {
// 作成したクラスをインスタンス
TenCountThread t = new TenCountThread();
// スレッドの開始
t.start();
// 作成したクラスの処理が終わるのを待つ
try {
t.join();
}catch (Exception e) {
System.out.println(e);
}
// 10回繰り返す
for (int i = 0; i < 10; i++) {
// 処理回数を出力
System.out.println("ThreadSampleクラスのmainメソッド:" + i );
}
}
}
■実行結果
・「10回カウント」クラスの処理が終了した後に、メインクラスの10回カウント処理が実行される。
TenCountThreadクラスのrunメソッド:0
TenCountThreadクラスのrunメソッド:1
TenCountThreadクラスのrunメソッド:2
TenCountThreadクラスのrunメソッド:3
TenCountThreadクラスのrunメソッド:4
TenCountThreadクラスのrunメソッド:5
TenCountThreadクラスのrunメソッド:6
TenCountThreadクラスのrunメソッド:7
TenCountThreadクラスのrunメソッド:8
TenCountThreadクラスのrunメソッド:9
ThreadSampleクラスのmainメソッド:0
ThreadSampleクラスのmainメソッド:1
ThreadSampleクラスのmainメソッド:2
ThreadSampleクラスのmainメソッド:3
ThreadSampleクラスのmainメソッド:4
ThreadSampleクラスのmainメソッド:5
ThreadSampleクラスのmainメソッド:6
ThreadSampleクラスのmainメソッド:7
ThreadSampleクラスのmainメソッド:8
ThreadSampleクラスのmainメソッド:9