我正在使用 java.util.concurrent 包来创建一个并行程序。我有 2 个线程:
- 调用 webservice 方法 1 的线程 1,以及
- 调用 webservice 方法 2 的线程 2。
我正在指定线程执行超时 - 假设如果线程 1 没有在指定的超时时间内完成执行,那么我必须拦截线程 1,继续使用线程 2 执行并在 jsp 中显示线程 2 结果(注意:如果两者线程需要太多时间来处理请求,然后我不希望 UI 等到它们完成)。
我尝试使用下面的代码,但它抛出了一个 InterruptedException。当一项任务陷入更多泥潭时,我该如何继续执行其他任务?
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");
}