您的位置:首页 > 其它

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 不能返回结果,不能抛出异常。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: