複数の呼び出し可能なスレッドを同時に(ループ内で)起動したいと思い、メインスレッドの全員からいくつかの情報を返したいとします。これを実現するには?複数のスレッドから情報を取得する方法は? Java
答えて
ユースケースについては何も知らないので、あなたの質問から最良のアプローチを言うことは不可能です!しかし、一般的に言えば、Executors.newFixedThreadPool()
を使用してスレッドプールを作成し、Callable<T>
オブジェクトをスレッドプールにサブミットすると、Future<T>
が返されます。
メインスレッドでは、対応する呼び出し可能関数がスレッドプール内で実行を終了するまでブロッキングするget()
メソッドのそれぞれを呼び出して、先にループすることができます。
Javaのスレッドの開始と停止の優先順位は保証されていません。いくつかのスレッドは、おそらくI/Oを待っているために、別のスレッドに渡すために開始された後に待機モードになることがあります。
ここでは、ループを使用して同時にスレッドを開始する、あなたが望むものがあるかもしれないと尋ねた質問があります。私が何であるかを知らない
Why is it that threads 10000 start() calls take more time than 10000 run() calls?
は、あなたのrequirements.But私はあなたを与えることができ、ほとんどのパスです。スレッドごとに一意のIDを生成し、そのIDをnull値フィールドでどこかに置くことができます。生成されたスレッドは、それらが属するテーブルを更新します(ID)。その後、値が更新されたかどうかを確認できます。値を取得します。
メインスレッドでスレッドを作成するときに、そのスレッドへの参照を保持し、これらの参照を通じてデータを取得できます。擬似コードは次のようになり:
int nSize = <some nomber>;
MyThread myThreadArray[] = new MyThread[nSize];
for(int i = 0; i < nSize; i++) {
myThreadArray[i] = new MyThread();
// Init and start the thread.
}
// Wait for all thread to end.
for(int i = 0; i < nSize; i++) {
myThreadArray[i].getData();
}
List
の任意のタイプではなく、固定サイズのアレイを用いることができます。
編集/追加:
子スレッドの作成時に、子スレッド内のデータを維持することは、あなたはまた、メインスレッドでそれを割り当て、それへの参照を与えることができる代わりに:
int nSize = <some nomber>;
MyThreadData myThreadDataArray[] = new MyThreadData[nSize];
for(int i = 0; i < nSize; i++) {
Thread thread = new MyThread(myThreadDataArray[i]);
// Init and start the thread.
}
// Wait for all thread to end.
for(int i = 0; i < nSize; i++) {
// Do something with myThreadDataArray[i].
}
を
スレッド終了後に長い時間スレッドデータを処理する必要がある場合は、これにより、gcはThread
オブジェクトをすぐに再利用できます。
- 1. 複数のテキストファイルから情報を取得する方法#
- 2. C++複数のパラメータを持つノードから情報を取得する方法
- 3. デスクトップアプリケーションからデータベース情報を取得する方法は?
- 4. 資格情報や認証情報からメールアドレスを取得する方法は?
- 5. Javaでグラフィックカードの情報を取得する方法は?
- 6. 複数のサーバーからディスクスペース情報を取得します
- 7. EDIDブロックからHDMIポート情報を取得する方法は?
- 8. TGUIDからインターフェイスタイプ情報を取得する方法は?
- 9. SoftLayer API:イメージテンプレートからblockDevice情報を取得する方法は?
- 10. Facebookからユーザー情報を取得する方法は?
- 11. JPEG EXIFデータからジオロケーション情報を取得する方法は?
- 12. イベントリンクからイベント情報を取得する方法は?
- 13. MS WordからJavaベースのサーバへの情報を取得する方法
- 14. コンソールから情報を取得する方法
- 15. Twitterのリスト情報を取得する方法(購読情報)
- 16. SLURMの個々のプロセス/スレッドの統計情報を取得する方法は?
- 17. MySQL:他のテーブルの情報に基づいて複数のテーブルから情報を取り出す方法は?
- 18. ActiveXコントロール内のVS_VERSION_INFOから情報を取得する方法
- 19. ID番号からオブジェクトインスタンスの情報を取得する方法
- 20. データバインディングからオブジェクトのプロパティ情報を取得する方法
- 21. SimpleCursorAdapterからContextMenuへの情報を取得する方法
- 22. 特定のjsonファイルから情報を取得する方法
- 23. セッションから特定の情報を取得する方法リスト
- 24. マーケットプレイスから最新のバージョン情報を取得する方法
- 25. Googleフォームのグリッドアイテムから行情報を取得する方法
- 26. URLから情報を取得する
- 27. JavaからJavaへのバイトコードコンパイラ:Javaクラスライブラリの情報を取得するには?
- 28. 複数のテーブルから情報を収集する方法
- 29. タイムゾーン情報を取得する方法
- 30. Javaのコマンドラインパラメータから情報を取得する
+1同時実行エグゼキュータを使用する場合。 –