私は、単一のリクエストで何百ものデータをロードする必要があるWebアプリケーションを持っています。問題は、データが分散していることです。そのため、複数の場所からデータをロードし、それらにフィルターを適用し、処理してから応答する必要があります。これらすべての操作を順番に実行すると、サーブレットが遅くなります。
そのため、すべてのデータを のような個別のスレッドにロードし、t[i] = new Thread(loadData).start();
すべてのスレッドの使用が終了するのを待ち、完了したらデータwhile(i < count) t[i].join();
を結合して応答することを考えました。
このアプローチが正しいのか、それとももっと良い方法があるのか わかりません。どこかで読んだことがありますが、サーブレットでスレッドを生成することはお勧めできません。
私の目的のコードは次のようになります。
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
Iterable<?> requireddata = requiredData(request);
Thread[] t = new Thread[requireddata.size];
int i = 0;
while (requireddata.hasNext())
{
t[i] = new Thread(new loadData(requiredata.next())).start();
i++;
}
for(i = 0 ; i < t.length ; i++)
t[i].join();
// after getting the data process and respond!
}