【Java】マルチスレッド処理:joinメソッドを使用して、スレッド処理が終わるのを待つ

■スレッド

スレッドとは、「道筋」や「糸」のような意味である。

プログラムの処理を実行する際、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
タイトルとURLをコピーしました