2011-07-29 7 views
1

各スレッドが完了するのに異なる時間がかかることがあると仮定して、できるだけ多くのスレッドを生成します。考えられるのは、スレッドの最大数を死滅させないで、可能な限り多くのスレッドを生成することです。スレッドを生成するとき、どのように最大数を抑制できますか?

など。 (spawnable)スレッドを生成している間、

私はejbを呼び出すためにスレッドを生成しようとしていますが、スレッドをメモリ不足例外に陥らせないように負荷をシミュレートするためにできるだけ多くの数値を生成したいと思います。

答えて

1

ここではExecutorフレームワークが引用されていますが、これは本当にすばらしいツールです(既にその答えが+1されています)。

しかし、私はOPが望んでいると信じてExecutors.newCachedThreadPool()です。

ドキュメントから

は、必要に応じて新しいスレッドを作成するスレッドプールを作成しますが、彼らは執行上の

もっと利用できる場合 再利用は、以前のスレッドを作成しますhere

6

Executors.newFixedThreadPool()または細かい制御のためには、独自のThreadPoolExecutorを作成してください。

+0

ウィル2つのAPIのいずれかを使用して、必要に応じてプールのサイズを設定するか、番号を指定しますか? –

+0

@Chin:[ThreadPoolExecutorのドキュメント](http://download.oracle.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.html)を参照してください。具体的には、「ThreadPoolExecutorは、corePoolSize(getCorePoolSize()を参照)およびmaximumPoolSize(getMaximumPoolSize()を参照)によって設定された境界に従って、プールサイズを自動的に調整します(getPoolSize()を参照)。 –

2

固定の回答はありません。スレッドの数をホスト機能に合わせる必要があります。

メモリの問題に対応して、スレッドの数だけでなく、スレッドの数も問題になります。単純な呼び出しを実行したり、巨大な配列を処理しなければならない場合は、同じではありません。

パフォーマンスに関して、ホストが専用であると仮定すると、コアあたりのスレッドの値は最小値です。彼らがリモートシステムを呼び出すことを考えれば、これらのスレッドのほとんどは時間を無駄に過ごすでしょう。アイドル時間の割合に応じて、あなたは多かれ少なかれ産卵することができます。

本質的に、あなたのホストのパフォーマンスをチェックし、スレッド番号を調整します。

関連する問題