以下は私のサンプルコードです。a.start()
呼び出したときにスレッドを作成し、すぐに「実行」を出力する必要があります。しかし、なぜ「開始」を20回印刷した後に呼び出されるのですか。
run()
スレッド「a」は、すぐに呼び出す必要がないことをどのように判断しますか。
public class JoinTest implements Runnable {
public static void main(String[] args) throws InterruptedException {
Thread a = new Thread(new JoinTest());
a.start();
for (int i = 0; i < 20; i++) {
System.out.print("Begin");
}
Thread.sleep(1000);
a.join();
System.out.print("\nEnd");
}
public void run() {
System.out.print("\nRun");
}
}
出力:
BeginBeginBeginBeginBeginBeginBeginBeginBeginBeginBeginBeginBeginBeginBeginBeginBeginBeginBeginBegin
Run
End
スレッドの動作について少し混乱しています。
私の意見では、メソッドが呼び出される前"run"
に印刷される"begin"
ため、前に印刷する必要join()
があり、結合時にスレッド「a」と呼ばれるメソッドは実行を終了している必要があり、その時点で結合を呼び出すことは役に立たないはずです。