多数のユーザー (~3000 ユーザー) を同時にサポートする Web アプリケーションでスレッド プールを使用したいと考えています。スレッド プールを使用して実行している別のスレッドで Web サービスを呼び出しています。Web サービスが応答を送信できない場合は常に、スレッドが停止します。そのため、150 ミリ秒後にスレッドを停止/タイムアウトしたいと考えています。これは私が今していることです:
カスタム スレッド:
public class RetrieveDocTask implements Runnable {
public void run() {
//gather variables
//invoke webservice
}}
スレッドを実行するフィルター:
public class DocFilter implements Filter {
private static ExecutorService executor = Executors.newCachedThreadPool();
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
RetrieveDocTask task=new RetrieveDocTask();
executor.execute(task);
}}
インターネットで解決策を探しましたが、どれもうまくいきませんでした。Future と callable を使用すると言う人もいれば、ThreadPoolExecutor を作成してタイムアウトを指定するように頼む人もいました。なぜ機能しなかったのかわかりません。また、多数のユーザーにキャッシュされたプール エグゼキューターを使用しても問題ありません。私はこれに慣れていないので、できるだけ早く実装する必要があります。