私は、以下のように3つのメソッドを並行して呼び出す必要があるサービスメソッドを持っていて、ServiceMethod()
をより速く実行します。スレッドプールをNewFixedThreadPoolと共有する方法
public void ServiceMethod()
{
ExecutorService executorService = Executors.newFixedThreadPool(10);
executorService.execute(new Runnable() {
public void run() {
System.out.println("Asynchronous task");
}
});
executorService.shutdown();
}
また、私は以下のと同時に、多分1000のクライアントによって呼び出されるServiceMethod()
が、私のパズルであることを言及したいと思います。
ServiceMethod()
を1000回呼び出された場合、我々は1000個の異なるスレッドプールを作成し、それらのそれぞれが10個のスレッドを含んでいますので、万件のスレッドがあるでしょうか?スレッドが再利用されることはありませんか?- にはどうすれば
static ExecutorService executorService = Executors.newFixedThreadPool(10);
とクラスレベルに法の適用範囲から
ExecutorService executorService = Executors.newFixedThreadPool(10);
を移動した場合については?静的変数で?そして、1000のクライアントのすべてが10のスレッドを共有します。その場合にのみ、スレッドは再利用されますか?
各タスクに対してローカルに10スレッドプールを作成する理由はありません。しかし必ずしも静的である必要はありません。ライフタイムや使用方法によっては、クラスインスタンスに限定することもできます。 – shmosel
実際、ServiceMethod()には10個のメソッドがあります。たぶんタイプミスです – Jason