0

私のアプリケーションには、応答を返すのに時間がかかる Web サービスを呼び出す必要があるサーブレット フィルターがあり、後で使用するために応答をセッションに保存します。この時間のかかるプロセスが実行されるまでに、パフォーマンスに影響を与えないように、フィルターを続行し、他のフィルターも呼び出し続ける必要があります。

だから、これは私が doFilter() の中でやろうと思っていることです。この目的のために別のスレッドを作成します。

log.debug("start filter");
CustomThread ct=new CustomThread();
ct.start(); //invoke web service in run()
log.debug("continuing with filter");

1000 人を超えるユーザーがアプリケーションにアクセスするという事実を考慮すると、このアプローチは適切に機能するでしょうか。この条件は、いくつかのシナリオで失敗しますか? 別のルートを取る必要がある場合は、提案してください。

4

2 に答える 2

2

主な問題は、毎回新しいスレッドを開始することです。これには時間がかかり、生成されるスレッドの数に制限がないため、多数の同時リクエストを受け取ると、サーバーがひざまずく可能性があります。

代わりにThreadPoolExecutorを使用します。これにより、これら2つの問題が解決されます。

于 2013-03-02T17:50:55.317 に答える
1

Executor自分でスレッド管理について心配するよりも、ある種のを使用する必要があります。このExecutorsクラスは、executor インスタンスを作成するためのさまざまな簡単な方法を提供します。

于 2013-03-02T17:49:47.743 に答える