Javaのjoinメソッド
joinメソッドの動きがよくわからない。。。という記事を見かけて、久しぶりにJavaでプログラムを書きました。
joinメソッドは、th.join();という文を実行したとき、その文を実行したスレッドAは、thというインスタンスが管理しているスレッドBが終了するのを待つ、ということですね。
以下、それほどわかりやすくはないですが、簡単なプログラム。
class Main { public static void main(String[] args) { System.out.println(Thread.currentThread() + ": Start. (A)"); try { Thread th = new Thread() { public void run() { try { System.out.println(Thread.currentThread() + ": Start. (B)"); for (int i = 0; i < 3; i++) { System.out.println(this + ": i = " + i); Thread.sleep(1000); } System.out.println(Thread.currentThread() + ": End. (B)"); } catch (InterruptedException e) { System.out.println(e); } } }; th.start(); th.join(); } catch (InterruptedException e) { System.out.println(e); } System.out.println(Thread.currentThread() + ": End. (A)"); } }
th.start();やth.join();を呼び出しているのがスレッドA(mainスレッド)で、runメソッドの本体を実行しているのはスレッドB(Thread-0スレッド)ですね。
コンパイルと実行結果です。
C:\work> javac Main.java C:\work> java Main Thread[main,5,main]: Start. (A) Thread[Thread-0,5,main]: Start. (B) Thread[Thread-0,5,main]: i = 0 Thread[Thread-0,5,main]: i = 1 Thread[Thread-0,5,main]: i = 2 Thread[Thread-0,5,main]: End. (B) Thread[main,5,main]: End. (A)