timebudget.java

来自「java concurrency in practice 源码. JAVA」· Java 代码 · 共 77 行

JAVA
77
字号
package net.jcip.examples;import java.util.*;import java.util.concurrent.*;/** * QuoteTask * <p/> * Requesting travel quotes under a time budget * * @author Brian Goetz and Tim Peierls */public class TimeBudget {    private static ExecutorService exec = Executors.newCachedThreadPool();    public List<TravelQuote> getRankedTravelQuotes(TravelInfo travelInfo, Set<TravelCompany> companies,                                                   Comparator<TravelQuote> ranking, long time, TimeUnit unit)            throws InterruptedException {        List<QuoteTask> tasks = new ArrayList<QuoteTask>();        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.getFailureQuote(e.getCause()));            } catch (CancellationException e) {                quotes.add(task.getTimeoutQuote(e));            }        }        Collections.sort(quotes, ranking);        return quotes;    }}class QuoteTask implements Callable<TravelQuote> {    private final TravelCompany company;    private final TravelInfo travelInfo;    public QuoteTask(TravelCompany company, TravelInfo travelInfo) {        this.company = company;        this.travelInfo = travelInfo;    }    TravelQuote getFailureQuote(Throwable t) {        return null;    }    TravelQuote getTimeoutQuote(CancellationException e) {        return null;    }    public TravelQuote call() throws Exception {        return company.solicitQuote(travelInfo);    }}interface TravelCompany {    TravelQuote solicitQuote(TravelInfo travelInfo) throws Exception;}interface TravelQuote {}interface TravelInfo {}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?