入力をポートでリッスンするJavaプログラムがあります。入力に基づいて、Webサービスを呼び出し、成功/失敗をクライアントプログラムに返します。
クライアント接続ごとにスレッドをフォークします。プログラムに接続するクライアントへの応答は迅速でなければなりません。
これらは私が検討している選択肢です
- 通常のスレッドを使用する
- と使用
ExecutorService
するnewFixedThreadPool
- と使用
ExecutorService
するnewCachedThreadPool
私がプールを検討している理由は、私のスレッドが短命であるためです-スレッドはWebサービスを呼び出し、クライアントに結果を返し、接続を閉じます。
newFixedThreadPool
接続がキューでスレッドを取得するために待機しているため、私は正しいことだとは思いません。
newCachedThreadPool
スレッドが1分後に死ぬということを除いて、完璧でした。私の場合、接続のバーストが発生します。つまり、複数の接続があり、その後数分間停滞する可能性があり、その後再びバーストします。CachedThreadPool内のスレッドは停止し、再度作成する必要があると思います。この場合、場合によっては#1のように動作する可能性があります。
理想的には、私はnewCachedThreadPool
最小限にしたいと思っていました-つまり、スレッド数が決して20を下回らないという設定です。したがって、アイドル状態のスレッドは強制終了されますが、最小しきい値を下回ることは決してありません。
このようなものはありますか?または、より良い代替案はありますか?