スレッドA
が実行されているとします。私には別のスレッドがありますが、B
そうではありません。Bが開始され、実行可能状態になっています。
電話するとどうなりB.join()
ますか?
の実行を一時停止しますか、それともAのメソッドが完了A
するのを待ちますか?run()
スレッドA
が実行されているとします。私には別のスレッドがありますが、B
そうではありません。Bが開始され、実行可能状態になっています。
電話するとどうなりB.join()
ますか?
の実行を一時停止しますか、それともAのメソッドが完了A
するのを待ちますか?run()
join()は、現在実行中のスレッドを、呼び出されたスレッドが停止するのを待つようにします。
つまり、Aが実行されていて、B.join()を呼び出すと、AはBが終了/終了するまで実行を停止します。
参加は、スレッドが停止するまで待機します。デッドスレッドで呼び出すと、すぐに戻るはずです。これがデモです:
public class Foo extends Thread {
/**
* @param args
*/
public static void main(String[] args) {
System.out.println("Start");
Foo foo = new Foo();
try {
// uncomment the following line to start the foo thread.
// foo.start();
foo.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Finish");
}
public void run() {
System.out.println("Foo.run()");
}
}
http://java.sun.com/docs/books/tutorial/essential/concurrency/join.htmlから
joinメソッドを使用すると、あるスレッドが別のスレッドの完了を待つことができます。tが現在実行中のスレッドを持つThreadオブジェクトの場合、
t.join();
現在のスレッドは、tのスレッドが終了するまで実行を一時停止します。結合の過負荷により、プログラマーは待機期間を指定できます。ただし、スリープの場合と同様に、joinはタイミングをOSに依存しているため、指定した時間だけjoinが待機するとは限りません。
学習リソースとしてJavaチュートリアルを強くお勧めします。
スレッドでjoinメソッドを呼び出すと、呼び出し元のスレッドは、join()が呼び出されて終了するのを待機します。呼び出し元または呼び出し先ではない他のスレッドには影響しません。
この例では、AからB.join()を呼び出している場合にのみ、AはBが完了するのを待ちます。CがB.join()を呼び出している場合、Aの実行は影響を受けません。
A
が現在実行中のスレッドであると思います。toを呼び出すとB.join()
、Bのrun()
メソッドが完了するまでそれが一時停止されます。これは正しいです?
どちらのスレッドからB.join()を呼び出すと、ブロックされ、Bが終了するのを待ちます。