16

java.lang.Thread のメソッド join() メンバーがそのように命名された理由を知っている人はいますか? そのjavadocは次のとおりです。

このスレッドが終了するのを待ちます。

一部のスレッドで join が呼び出されると、スレッドを呼び出しているスレッドは、他のスレッドが終了して実行を継続するのを待機しています。呼び出し元のスレッドも同様に停止すると思われますが、作成者がこの名前を使用した理由はまだ明らかではありません。

4

6 に答える 6

20

これはスレッド化における一般的な名前です。Java が最初に使用したわけではありません。(たとえば、これはpthreadsも使用します。)

2 人が散歩しているように想像できると思います。もう 1 人に加わって、歩き終わるまで一緒に歩いてから、元の作業に戻ります。その類推が本来の理由だったのかもしれませが、正確には直感的ではないことに同意します。

于 2009-06-22T12:01:56.020 に答える
8

基本的に、実行の呼び出しスレッドが特定の実行状態に参加するのを待つことを述べているため、このように名付けられました。また、posix や他の多くのスレッド パッケージで join という名前も付けられています。

join の呼び出しが戻った後 (中断されない限り)、2 つの実行スレッドは基本的にその時点から一緒に実行されます (そのスレッドは現在終了したスレッドの戻り値を取得します)。

于 2009-06-22T12:02:41.247 に答える
6

これは、制御の流れが並行スレッドに分割されるときの並行ソフトウェア モデリングに由来します。その後、実行の 2 つのスレッドが再び結合されます。

またwaitToDie()、おそらく a) 長すぎ、b) 病的すぎました。

于 2009-06-22T12:03:42.633 に答える
2

うーん...これは本当に正しくありませんが、私は「待合室」を考えました(実際には、FIFO、HRRNなどの特定のスケジューリングを持つキューではありません)。スレッドが続行できず、終了するために別のスレッドを待つ必要がある場合は、待機室にいる人 (別名スレッド) に参加して次にアクティブになります...

于 2009-07-21T17:56:42.093 に答える
1

別の実行スレッド (つまり、join を呼び出しているスレッド) が現在の (つまり、呼び出し元の) スレッドに参加 (つまり、終了) するのを待っているためです。

呼び出し元のスレッドは終了しません。他のスレッドが終了するのを待つだけです。

于 2009-06-22T12:03:09.263 に答える
0

これは広く使われている用語です (Java 以外でも)。私はそれを、何らかの方法でスレッドを別のスレッドに関連付けることのようなものと考えています。私は Thread.Associate() の方が良い選択肢だったと思いますが、 Join() も悪くありません。

于 2009-06-22T12:05:56.590 に答える