私のJettyサービスでは、いくつかのスレッドを実行させるトリガとなるエンドポイントがあります。私は現在ThreadExecutorPool
を使ってRunnable
を実行しています。しかし、エンドポイントへの個々の要求ごとに残っているジョブの数を知り、複数の同時要求を許可したいと考えています。1つのエグゼキュータが残りのトラッキングを行うための実行キューを分離する
私の考えは、リクエストごとに1つのキューがあり、ラウンドロビン方式で各キューから取り出す何らかのエグゼキュータを持つようなことです。私はこのようなものが箱から出てくるかどうか疑問に思います。
実行順序は気にしないことに注意してください。私が気にしているのは、各リクエスト(つまりセッション)に等しい時間が与えられ、各セッションについて、まだ開始/完了していないスレッドの数がわかるということです。
だから、私はMultiQueueExecutorかそのようなものを推測しますか?
ほぼ等しい時間。私。リクエスト1はリクエスト2をブロックすべきではありません。 Futuresをポーリングする際の私の問題は、タスクがキューに追加されるまでに時間がかかることです。だから、私が何かを逃していない限り、ポーリングの未来は、タスクが完了したときに単に教えてくれるだけですが、現在キューにいる人の数はわかりません。 – marisbest2
それぞれの要求は、完了したタスクの数と残っている数を知ることになります。また、TPEキューを調べて、キュー内のタスクの総数を確認することもできます。あなたはあなたの要件に関してより具体的になりますか? @ marisbest2 – Gray
同じ時間の点では、いくつかの選択肢があります。新しい要求ごとに新しいスレッドをフォークするキャッシュされたスレッドプールを作成できます。あなたがたくさんのリクエストを受けている場合、これはうまくいかないかもしれません。それ以外の場合は、リクエストがTPE上にある場合を除き、以前に送信されたタスクによってブロックされていないタスクがどのように開始されるのか分かりませんが、サーバー@ marisbest2をスラッシュする可能性があります。 – Gray