複数の呼び出し可能なスレッドを同時に(ループ内で)起動したいと思い、メインスレッドの全員からいくつかの情報を返したいとします。これを実現するには?複数のスレッドから情報を取得する方法は? 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. Javaでグラフィックカードの情報を取得する方法は?
- 3. 複数のサーバーからディスクスペース情報を取得します
- 4. Facebookからユーザー情報を取得する方法は?
- 5. MS WordからJavaベースのサーバへの情報を取得する方法
- 6. コンソールから情報を取得する方法
- 7. MySQL:他のテーブルの情報に基づいて複数のテーブルから情報を取り出す方法は?
- 8. マーケットプレイスから最新のバージョン情報を取得する方法
- 9. SimpleCursorAdapterからContextMenuへの情報を取得する方法
- 10. セッションから特定の情報を取得する方法リスト
- 11. ID番号からオブジェクトインスタンスの情報を取得する方法
- 12. ActiveXコントロール内のVS_VERSION_INFOから情報を取得する方法
- 13. URLから情報を取得する
- 14. タイムゾーン情報を取得する方法
- 15. JavaからJavaへのバイトコードコンパイラ:Javaクラスライブラリの情報を取得するには?
- 16. drupalデータベースから情報を取得する方法
- 17. テーブルから情報を取得する方法
- 18. オーディオファイルから音楽情報を取得する方法
- 19. NodeIDからlong/lat情報を取得する方法
- 20. エンティティ/オブジェクトからNHibernateマッピング情報を取得する方法
- 21. Mac AppからiPhone情報を取得する方法
- 22. Windows Phone 7マーケットプレイスから情報を取得する方法
- 23. jsonオブジェクトから情報を取得する方法、属性を取得する方法はありますか?
- 24. データベースから情報を取得する
- 25. Javaラジオボタンから情報を取得する
- 26. Java Maven MOJO - プロジェクトから情報を取得するPOM
- 27. Python RegEx - 文字列から複数の情報を取得する
- 28. Jenkins APIからビルド情報を取得
- 29. 実行可能ファイルの複数/二重コード署名から情報を取得する方法
- 30. JQuery - ドラッグアンドドロップファイル - ファイル情報の取得方法?
+1同時実行エグゼキュータを使用する場合。 –