結果を返す前に複数の小さな計算を行う Web サービスがあります。ExecutorService
マスター - ワーカー パターンを実装する方法として提供されたを使用したいExecutors.newFixedThreadPool()
(つまり、呼び出しinvokeAll
て、すべての結果が終了するまでスレッドを待機させる)。理想的には、すべての Web サービス スレッドが同じエグゼキュータ サービスを使用して、すべてが独自のスレッド プールを作成する必要がなく、システムのすべての処理時間を消費する 1 つの大きなプールを共有できるようにします。
このアプローチに関する質問:
invokeAll
複数のスレッドから関数にアクセスしても安全ですか。- エグゼキュータ サービスはリクエストを順番に処理しますか (つまり、最初にスレッド 1 のすべてのタスクを処理し、次にスレッドのタスクを処理します)。
- 10 個のワーカー スレッドを使用し、受信する要求の数に応じて使用可能なスレッドの最大数を設定する方法はありますか。つまり、1 つの要求があるとします。その要求に対して 10 個のスレッドすべてが使用されます。2 つのリクエストがある場合、リクエストごとに 5 つのスレッドに分割されます。