4

スレッドAが実行されているとします。私には別のスレッドがありますが、Bそうではありません。Bが開始され、実行可能状態になっています。

電話するとどうなりB.join()ますか?

の実行を一時停止しますか、それともAのメソッドが完了Aするのを待ちますか?run()

4

6 に答える 6

10

join()は、現在実行中のスレッドを、呼び出されたスレッドが停止するのを待つようにします。

つまり、Aが実行されていて、B.join()を呼び出すと、AはBが終了/終了するまで実行を停止します。

于 2009-12-13T19:57:00.770 に答える
8

参加は、スレッドが停止するまで待機します。デッドスレッドで呼び出すと、すぐに戻るはずです。これがデモです:

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()");
    }

}
于 2009-12-13T19:57:05.060 に答える
3

http://java.sun.com/docs/books/tutorial/essential/concurrency/join.htmlから

joinメソッドを使用すると、あるスレッドが別のスレッドの完了を待つことができます。tが現在実行中のスレッドを持つThreadオブジェクトの場合、

t.join();

現在のスレッドは、tのスレッドが終了するまで実行を一時停止します。結合の過負荷により、プログラマーは待機期間を指定できます。ただし、スリープの場合と同様に、joinはタイミングをOSに依存しているため、指定した時間だけjoinが待機するとは限りません。

学習リソースとしてJavaチュートリアルを強くお勧めします。

于 2009-12-13T20:12:57.667 に答える
2

スレッドでjoinメソッドを呼び出すと、呼び出し元のスレッドは、join()が呼び出されて終了するのを待機します。呼び出し元または呼び出し先ではない他のスレッドには影響しません。

この例では、AからB.join()を呼び出している場合にのみ、AはBが完了するのを待ちます。CがB.join()を呼び出している場合、Aの実行は影響を受けません。

于 2009-12-13T20:05:25.617 に答える
0

Aが現在実行中のスレッドであると思います。toを呼び出すとB.join()、Bのrun()メソッドが完了するまでそれが一時停止されます。これは正しいです?

于 2009-12-13T19:57:23.603 に答える
0

どちらのスレッドからB.join()を呼び出すと、ブロックされ、Bが終了するのを待ちます。

于 2009-12-13T19:58:12.967 に答える