Thread join() メソッドについて調査していたところ、stackoverflow に関するThreadJoinMethodの投稿に出会いました。実際の例を開発するためにコードを変更しましたが、出力に混乱しています。コードスニペットは.
class JoinRunnable implements Runnable{
public void run() {
for(int i =0 ; i < 4 ; i++){
System.out.println(i);
}
}
}
public class TestJoin{
public static void main(String[] args) throws InterruptedException {
JoinRunnable joinRunnable = new JoinRunnable();
Thread t1 = new Thread(joinRunnable);
Thread t2 = new Thread(joinRunnable);
t1.start();
t2.start();
System.out.println("Currently running thread: " + Thread.currentThread().getName());
t1.join();
t2.join();
System.out.println("I must wait");
}
}
次のプログラムの出力は次のとおりです。
0
1
2
3
0
1
2
3
Currently running thread: main
I must wait
私は出力で混乱しています。現在のスレッドはjoin
on t1 および t2 の呼び出し後に結合されますが、t1 および t2 の完了後にステートメント"Currently Running Thread: main"
が印刷されるのはなぜですか? ここでいくつかの重要な概念が欠けていますか? main() は、前ではなく結合ステートメントの後に t1 と t2 を結合するためです。誰かがそれについて詳しく説明できますか?