【マルチスレッド】マルチスレッドの再開方法

前回はフラグを用いてマルチスレッドを終了する方法を紹介した。
今回は、一度終了したスレッドを再開させる方法について説明する。

フラグを用いてrunメソッドのループを終了するには、以下の様なソースにすると紹介した。

class multiThread extends Thread{
	private boolean threadFlag = true;
	
	public void run(){
		while(threadFlag){
		//ここにマルチスレッドで実行したい処理を書く
		}
	}
	
    //スレッド終了時に呼び出し
	public void stopThread(){
		threadFlag = false;
	}
}

このソースのままで
start()でrunメソッドを実行→stopThreadで中断→再度start()でrunメソッドを実行
とすると、at java.lang.Thread.start(Unknown Source)とエラーがでてしまう。
どうやらrunメソッドを一度終了すると、スレッドの実体がなくなってしまうらしい。

そこで、以下のようにstartメソッドの中でオブジェクト作成を行うことによって、この問題は解決できる。

class multiThread extends Thread{
	private boolean threadFlag = true;
	
    //スレッド開始時に実体を作成
	public void start(){
		threadFlag = true;
		new Thread(this).start();
	}

	public void run(){
		while(threadFlag){
		//ここにマルチスレッドで実行したい処理を書く
		}
	}
	
    //スレッド終了時に呼び出し
	public void stopThread(){
		threadFlag = false;
	}
}