スレッドの同期(join)|Javaから楽しく学ぶ!ゲームプログラミング専門学校

Javaから楽しく学ぶ!ゲームプログラミング専門学校

ゲームプログラミングとはその名のとおりゲームのプログラムを作ることを指します。『Javaから楽しく学ぶ!ゲームプログラミング専門学校』ではゲームプログラミングについて、実際にゲームプログラムをJAVAプログラミング言語を使用し、作成していきながら詳しく解説していきます。

スレッドの同期(join)

スレッドを複数起動させると、各々のスレッドは各々で処理を進めますが、どこかで同期を取りたいといった場合もあると思います。
そのようなとき、Threadクラスのjoinメソッドを使用します。

public class JoinSample implements Runnable{
private Thread th;
private boolean running;
private int width;
private int height;
private int count;

public static void main(String[] args){
JoinSample js = new JoinSample();
Thread th = new Thread(js);
th.start();
try{
System.out.println("スレッドth 開始!");
th.join();
System.out.println("スレッドth 終了!");
}catch(InterruptedException e){}
}
public void run(){
for(int i = 5; i > 0; i--){
System.out.println("スレッドth 終了まで " + i + "秒");
try{
Thread.sleep(1000);
}catch(InterruptedException e){}
}
}
}

join()メソッドを呼び出したスレッドは、対象のスレッドが終了するまで待機状態になります。
上記サンプルでは、新しいスレッドで、スレッド終了までのカウントダウンを行い、メインスレッドは新しいスレッドを起動させたら、終了するまで待機しています。

【実行結果】
スレッドth 開始!
スレッドth 終了まで 5秒
スレッドth 終了まで 4秒
スレッドth 終了まで 3秒
スレッドth 終了まで 2秒
スレッドth 終了まで 1秒
スレッドth 終了!


join()メソッドは待機させる時間を指定することもできます。
join() 
このスレッドが終了するのを待機します。

join(long millis)
このスレッドが終了するのを、最高で millis ミリ秒待機します。

join(long millis, int nanos)
最高で millis ミリ秒に nanos ナノ秒を加算した間、
このスレッドが終了するのを待機します。

引数を指定しない場合、対象のスレッドが終了するまで永久に待つことになりますが、引数で待機時間を指定すると、対象のスレッドが指定した時間だけ待っても終了しなかった場合、join()メソッドは実行を終了します。

下記がjoin()メソッドを呼び出しているコード部分です。
    public static void main(String[] args){
JoinSample js = new JoinSample();
Thread th = new Thread(js);
th.start();
try{
System.out.println("スレッドth 開始!");
th.join();
System.out.println("スレッドth 終了!");
}catch(InterruptedException e){}
}

メインスレッドは"スレッドth 開始!"文字列を出力した後、join()メソッドによってスレッドthが終了するまで待機しています。
スレッドthが終了したら、"スレッドth 終了!"文字列を出力し、メインスレッドも終了します。
トラックバック:0Edit
Copyright © Javaから楽しく学ぶ!ゲームプログラミング専門学校 All Rights Reserved.
当サイトのテキストや画像等すべての転載転用・商用販売を固く禁じます