Callable 对象 Future异步计算 统计结果
2014-02-12 13:50
225 查看
ExecutorService pool = Executors.newFixedThreadPool(MAX_THREAD_CNT); Map<DBNeInfo, String> resultMap = new HashMap<DBNeInfo, String>(); List<Future<Map<DBNeInfo, String>>> futures = new ArrayList<Future<Map<DBNeInfo, String>>>(); try { //并发执行任务 for (DBNeInfo ne : nelist) { futures.add(pool.submit(new UpdatDnsTask(ne, dnsIp, dnsIpBak))); } } finally { pool.shutdown(); } //获取返回结果 for (Future<Map<DBNeInfo, String>> future : futures) { try { Map<DBNeInfo, String> map = future.get(); if ((null != map) && !map.isEmpty()) { resultMap.putAll(map); } } catch (InterruptedException e) { logger.error("updateDnsToNe InterruptedException", e); } catch (ExecutionException e) { logger.error("updateDnsToNe ExecutionException", e); } } logger.debug("syncNeFromSLBs end"); return resultMap;
/** * 并发更新dns任务 */ private class UpdatDnsTask implements Callable<Map<DBNeInfo, String>> { /** * ip地址 */ private final DBNeInfo ne; private final String dnsIp; private final String dnsIpBak; /** * 构造函数 * * @param ip 同步网元的IP地址 * @param isAddSelf 是否返回本身的网元信息 * @throws CDNException 异常信息 */ public UpdatDnsTask(final DBNeInfo ne, final String dnsIp, final String dnsIpBak) throws CDNException { if (ne == null) { throw new CDNException("ne is null"); } this.ne = ne; this.dnsIp = dnsIp; this.dnsIpBak = dnsIpBak; } @Override public Map<DBNeInfo, String> call() throws CDNException { return updateDns(ne, dnsIp, dnsIpBak); }}
Callable 返回计算结果,可以抛出异常,Runnable 不能返回结果,不能抛出异常。
相关文章推荐
- python中利用Future对象异步返回结果示例代码
- Python学习之使用Future对象来异步返回结果方法详解
- 多线程-从Future对象中获取线程处理Callable方法的结果
- python里使用Future对象来异步返回结果
- public interface Future<V>Future 表示异步计算的结果
- java Callable和Future并发调用,并且返回结果小例子
- 利用Future异步获取多线程的返回结果
- 06____线程返回执行结果(Callable和Future)
- java中异步计算之Future
- java 利用Future异步获取多线程任务结果
- java异步计算Future的使用(转)
- 基于Callable和Future的匹配文件数量计算实例
- java异步计算Future的使用
- Callable和Future实现调用任务并返回结果数据
- Callable返回的Future对象
- 利用Future异步获取多线程的返回结果
- java异步计算Future的使用
- java线程创建方法只有两个?NO! 异步计算的结果如何拿到?
- java异步计算-Future使用
- 利用Future异步获取多线程的返回结果