2011-08-03 15 views

答えて

3

ユースケースについては何も知らないので、あなたの質問から最良のアプローチを言うことは不可能です!しかし、一般的に言えば、Executors.newFixedThreadPool()を使用してスレッドプールを作成し、Callable<T>オブジェクトをスレッドプールにサブミットすると、Future<T>が返されます。

メインスレッドでは、対応する呼び出し可能関数がスレッドプール内で実行を終了するまでブロッキングするget()メソッドのそれぞれを呼び出して、先にループすることができます。

+1

+1同時実行エグゼキュータを使用する場合。 –

0

Javaのスレッドの開始と停止の優先順位は保証されていません。いくつかのスレッドは、おそらくI/Oを待っているために、別のスレッドに渡すために開始された後に待機モードになることがあります。

ここでは、ループを使用して同時にスレッドを開始する、あなたが望むものがあるかもしれないと尋ねた質問があります。私が何であるかを知らない

Why is it that threads 10000 start() calls take more time than 10000 run() calls?

0

は、あなたのrequirements.But私はあなたを与えることができ、ほとんどのパスです。スレッドごとに一意のIDを生成し、そのIDをnull値フィールドでどこかに置くことができます。生成されたスレッドは、それらが属するテーブルを更新します(ID)。その後、値が更新されたかどうかを確認できます。値を取得します。

1

メインスレッドでスレッドを作成するときに、そのスレッドへの参照を保持し、これらの参照を通じてデータを取得できます。擬似コードは次のようになり:

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オブジェクトをすぐに再利用できます。

関連する問題