5. スレッドの同期
マルチスレッドプログラミング 5章 スレッドの同期
5.1. 他のスレッドの終了を待つ別のスレッドにある処理を任せ、そのスレッドが終了したときに、自分のスレッドの処理を再開したいという場面があります。このようなとき、Threadクラスのjoinメソッドを利用します。 joinメソッドには、引数の異なる3つのメソッドがあります。
join()は該当のスレッドが終了するのを永久に待ちつづけます。引数のあるものは、該当のスレッドが終了しなくても、指定した時間経過すれば処理を再開します(ただし、join(0)はjoin()と同じように永遠に待機します)。いずれのメソッドも、外部のスレッドよりinterruptメソッドで割り込まれた場合、InterruptedExceptionを発生して処理を終了します。 次のプログラムは、新しいスレッドでカウントダウンを実行し、メインのスレッドではカウントダウンの終了を待ってメッセージを表示します。 リスト JoinTest.java 1: public class JoinTest extends Thread {
2:
3: public void run() {
4: for (int i = 3; i >= 0 ; i--) {
5: try {
6: sleep(1000);
7: } catch (InterruptedException e) {}
8: System.out.println(i);
9: }
10: }
11:
12: public static void main(String[] args) {
13: JoinTest t = new JoinTest();
14: t.start();
15: try {
16: System.out.println("スレッド t の終了を待機します。");
17: t.join(); // カウントダウンが終了するのを待つ
18: System.out.println("スレッド t が終了しました。");
19: } catch (InterruptedException e) {}
20: }
21:
22: }
このプログラムを実行すると、次のような結果となります。 ![]() カウントダウンのスレッドが終了してから、終了のメッセージを表示していることがわかります。 (実習課題1)以下のコンソールプログラムを作成しなさい。
|
![]()
![]()
|