java.util.concurrentパッケージを使用して並列プログラムを作成しています。私は2つのスレッドを持っています:
- Webサービスmethod-1を呼び出すthread-1、および
- Webサービスメソッド2を呼び出すthread-2。
スレッド実行タイムアウトを指定しています-スレッド1が指定されたタイムアウト内に実行を完了しない場合、スレッド1をインターセプトし、スレッド2で実行を続行し、スレッド2の結果をjspで表示する必要があるとします(注:両方の場合スレッドはリクエストの処理に時間がかかりすぎるため、UIが完了するまで待機したくありません)。
以下のコードで試しましたが、InterruptedExceptionがスローされます。1つのタスクがより多くのマイアを必要とする場合、どうすれば他のタスクを進めることができますか?
ExecutorService executor = Executors.newFixedThreadPool(2);
CompletionService<ArrayList<AvailableWeatherDetailVO>> compService = new ExecutorCompletionService<ArrayList<AvailableWeatherDetailVO>>(executor);
// Start amazonTask using thread-1
try{
compService.submit(amazonTask).get(20, TimeUnit.MILLISECONDS);
amazonFuture = compService.take();
amazonFinalList =(ArrayList<AvailableWeatherDetailVO>)amazonFuture .get() }
catch (TimeoutException e) {
compService.submit(amazonTask).cancel(true);
//throw new TimeoutException("Thread not executed with in speifed time");
}
// Start googleTask using thread-2
try{
compService.submit(googleTask).get(100, TimeUnit.MILLISECONDS);
googleFuture = compService.take();
googleFinalList =(ArrayList<AvailableWeatherDetailVO>)googleFuture .get() }
catch (TimeoutException e) {
compService.submit(googleTask).cancel(true);
//throw new TimeoutException("Thread not executed with in speifed time");
}