私はスレッド結合でクエリを持っています。クエリスレッドがそれ以上のスレッドが、私はone.startThread#joinは 'join'ステートメントの後に続くすべてのスレッドを一時停止しますか?
One one = new One();
Two two = new Two();
Three three = new Three();
Four four = new Four();
one.start();
one.join(); // join placed after one.start
two.start();
three.start();
four.start();
後one.join
を配置している以下のコードでは、正常 完了されるまでに参加した後、以下のすべてのスレッドが一時停止されることを意味し参加するかどうかであります
私は以下のような結果を得ています。これは、スレッド1が完了するまで、2,3,4スレッドをブロックすることを示しています。
まず0
まず1
まず2
まず3
まず4
第0
第0
四0
第1
四1
第1
第2の2
第2
第四に2
第二3
第四に3
第3
第二4
第四4
第4
今すぐ下記のコードでは、私はtwo.start()
後one.join()
置かれています
One one = new One();
Two two = new Two();
Three three = new Three();
Four four = new Four();
one.start();
two.start();
one.join(); // join placed after two.start
three.start();
four.start();
a nd以下のような結果が得られました。これは、1つのスレッドと2つのスレッドが完了するまで、スレッドが3つと4つのスレッドをブロックすることを示します。
まず0
第0
まず1
第1
第2
まず2
第3
まず3
第4
まず4
四0
第三者0
第1
四1
第2
四2
第3
四3
第4
四4
いいえ 'join'は他のスレッドをブロックせず、' join'を呼び出したスレッドのみをブロックします。メインスレッド自体がブロックされているため、コードでは他のスレッドを開始できません。 – Tom
@Tomなぜ私は 'one.join()'を間違って配置したのですか? –
あなたのメインスレッドはブロックされていると私はすでに言っていました。だから、 'join'コールの前にすべてを実行することができ、すべてを実行できるようになるまで待たなければなりません。 – Tom