スレッド結合が論理を順次実行するので、最初に複数のスレッド間でタスクを分割する動機は何ですか?つまり、実際にスレッド結合が必要な実際のシナリオを思いつくことはできません。スレッド結合()は、スレッドと同時実行性の唯一の目的を破ったときに便利です
答えて
複数のスレッドを起動する場合は、join()
を使用して、すべてが完了するまで待つことができます。
たとえば、5つの作業項目をそれぞれ独自のスレッドで起動し、5スレッドでjoin()
を呼び出すと、5つの項目をすべて同時に処理できますが、すべて完了するまでブロックされます。
しかし、多くの言語/フレームワークではスレッドを明示的に結合するよりも優れた選択肢があることに注意してください。たとえば、.NETの世界では、TPLを使用すると、1つまたは複数のタスク(必要に応じてスレッドにマッピングできる)がすべて完了したときに発生する継続をスケジュールできます。
+1 'thread.join()'のもう1つの重要な機能はメモリ同期です。成功する 'join()'を呼び出すスレッドは、私が知っているより多くのスレッドパッケージと共に、それが結合したスレッドによって行われたメモリ更新を見ます。 – Gray
いくつかの状況では、同様のタスクを一連のスレッドに渡すことがありますが、探している「回答」を得るためにはすべてのスレッドを完了する必要があります。
たとえば、チェスゲームを作っていたら、個々のスレッドに潜在的な動きのセットを渡して、それらがすべて終了するまで待ってから「ベスト」を選択することができます。
多くの場合、並行して実行することが必要な場合があります。すべて完了したら、結果をすべて組み合わせて前進したいと思うことがあります。
たとえば、サーバー側で多数の独立したウィジェットのデータをロードする必要があるWebポータルのホームページを取り上げます。それらのデータロードを並行して起動し、メインページをレンダリングする前にそれらのページにメインスレッドを参加させる(つまり、完了するのを待つ)ことができます。
これは、人間に知られている他のスレッド間通信メカニズムよりも多くの弱点を持っているため、有用ではありません。オーバーヘッドを高め、プロセスのシャットダウンを防ぐ可能性が高い、貧弱なマルチスレッド設計を積極的に推進します。 GUIアプリケーションで。
使用を避けることができます。
私は合理的に複雑なアプリケーションであるJettyでjoin()を使う完全に合理的なコードを見てきたので私はダウン投票しました。シャットダウン時にスレッドプール内のスレッドが終了するまで待機するために使用されました。 java.util.concurrentには現在より優れたオプションがありますが、これは古いバージョンのJavaをサポートしたい場合には役に立ちません。 –
私は、Join()、TThread.WaitForなどを使用して開発者を様々な言語で停止しようと30年以上努力しました。私の見解は変わりません。 –
あなたを説得しようとしていません(実際には、ほとんどの場合、より良い選択肢があることに同意します)。ただ投票を説明するだけです。 –
- 1. Qtを使って同時実行スレッド
- 2. 同時スレッド実行の実行
- 3. 一定の時間スレッドを実行し、時間切れのときにスレッドを終了する
- 4. スレッド#実行とスレッド#ウェイクアップの違いは?
- 5. Javaの同時実行 - 監視スレッド
- 6. Reader Writer probaをJavaで間違ったスレッド名で使用すると、同時に実行できず、同時実行ができなくなる
- 7. スレッドの問題、同時スレッド制限、同時に実行される最大スレッドの問題
- 8. 私は別のスレッドで同期的に実行すると、合計で非同期になりますか?
- 9. 別のスレッドで同期すると、sqliteで同時実行性の問題が発生しますか?
- 10. スレッドの結合メソッドのような終了を待っているGroovy同時実行エグゼキュータ
- 11. なぜ複数のスレッドを同時に実行できる同期メソッド?
- 12. IIS 7.5の静的変数と長時間実行スレッド
- 13. Node.js - 別のスレッドでスクリプトの実行を一時停止する
- 14. 同時に実行するスレッドの数をバインドする方法
- 15. 2つのスレッドを同時に実行する
- 16. IndexOutOfBoundsException 2つのスレッドで同時に実行されるlist.remove
- 17. OS内部のスレッド作成を同時に実行できますか?
- 18. Androidスレッドとオーディオを同時に再生
- 19. スレッド再目的
- 20. Windowsのスレッド(実行時にC、pthreadsを、STD ::スレッド)
- 21. 依存性注入と組み合わせたQtスレッドの使用目的は何ですか?
- 22. スレッドの同時実行レベルを変更するん何を?
- 23. 動的スレッド数の同時作成
- 24. 静的メソッドとスレッドの安全性
- 25. 長時間実行スレッド+ライフサイクル
- 26. Javaのスレッド内でスレッドを実行できますか?
- 27. 非同期RIAサービスコールを実行するときに実行されるコールバックはどのスレッドですか?
- 28. Javaの同時実行性とタスク
- 29. は複数の実行スレッドで同時に操作を開始します
- 30. Multiplethreadingは2番目のスレッドを一時停止します
私も。 Join()は、threadpoolsやapp-lifetimeスレッドを使用する代わりに、スレッドを継続的に作成/終了/破棄するための招待であるため、作成などのオーバーヘッドに時間とCPUを浪費します。 Join()は、終了時にデッドロックするGUIアプリケーションにも適しているので、プロセスの終了を防ぐことができます。おそらく、最悪のスレッド間通信が存在する可能性があります。 –