private class QuoteTask implements Callable<TravelQuote>{
private final TravelCompany company;
private final TravelInfo travelInfo;
...
public TravelQuote call() throws Exception{
return company.solicitQuote(travelInfo);
}
}
public List<TravelQuote> getRankedQuotes(
TravelInfo travelInfo,Set<TravelCompany> companies,Comparator<TravelQuote> ranking,long time,TimeUnit unit
)throws InterruptedException{
List<QuoteTask> tasks = new ArrayList<>();
for(TravelCompany company:companies){
tasks.add(new QuoteTask(company,travelInfo));
}
List<Future<TravelQuote>> futures = exec.invokeAll(tasks,time,unit);
List<TravelQuote> quotes = new ArrayList<TravelQuote>(tasks.size());
Iterator<QuoteTask> taskIter = tasks.iterator();
for(Future<TravelQuote> f:futures){
QuoteTask task = taskIter.next();
try{
quotes.add(f.get());
}catch(ExecutionException e){
quotes.add(task.getFailurQuote(e.getCause()));
}catch(CancellationException e){
quotes.add(task.getTimeoutQuote(e));
}
}
Collections.sort(quotes,ranking);
return quotes;
}
预定时间内请求旅游报价FutureTask
最新推荐文章于 2022-04-02 23:45:15 发布