Callable 对象 Future异步计算 统计结果

        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 不能返回结果,不能抛出异常。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值