Javaメインスレッドは、すべての子スレッドの実行が終了するのを待ちます(一般的なインタビューの質問)



Java Main Thread Waits



記事のディレクトリ

Javaのメインスレッドは、すべての子スレッドが実行されるのを待って実行されます。この要件は、作業でよく使用されます。たとえば、ユーザーが製品を注文すると、バックグラウンドが一連の処理を実行します。効率を上げるために、各処理で1つずつ使用できます。実行するスレッド、すべての処理はユーザーに戻って注文を正常に行う前に完了します。私が考えることができる方法について話させてください。皆さんが私を批判することを歓迎します。

1.睡眠

usesleepMethod、メインスレッドを一定期間スリープさせます。もちろん、このスリープ時間は主観的な時間であり、私たち自身のものです。この方法はお勧めしませんが、結局のところ、ここに書き込むことが解決策です。



画像

2.join()

Threadのjoin()を使用して、すべての子スレッドが実行され、メインスレッドが実行され、thread.join()が指定されたスレッドを現在のスレッドに追加して、2つの代替スレッドを順次スレッドにマージできるようにします。たとえば、スレッドAのJoin()メソッドがスレッドBで呼び出され、スレッドAが実行を終了するまでスレッドBは実行されません。



画像

以下では、並行パッケージのいくつかの並行性ツールを紹介します。

3.CountDownLatchのマルチスレッド完了を待ちます

画像



ここにポイントがあります。countDownLatchはCountDownLatchオブジェクトの内部カウンターの値を再初期化または変更できません。スレッドは、別のスレッドがawaitメソッドを呼び出す前にcountdownメソッドを呼び出します。

4.同期バリアCyclicBarrier

画像

誰もがここに書いています、いくつかの疑問があります。countDownLatchwithcyclicBarrier違いは何ですか?それらの違い:countDownLatchは1回のみ使用でき、CyclicBarrierメソッドはReset()methodResetを使用でき、soCyclicBarrierメソッドはより複雑なビジネスシナリオを処理できます。

以前はオンラインで見ていました。countDownLatchとcyclicBarrier画像のメタファーは100メートルのレースで使用することです。countDownLatchフィニッシュラインを超えると、1人が1人のスコアを審査員に送信し、10人が送信します。ゲームは10回です。CyclicBarrier、最後の人がフィニッシュラインを通過したときにのみ全員のデータを送信し、1回だけ送信します。これが違いです。

さて、ここに書いてください、他の方法はしばらくそれを考えていませんでした、レンガを作ることを歓迎します、私の記事があなたに役立つと思うなら、注意を払ってください、ありがとう