多线程调用第三方接口
最近刚刚做完一个新项目,记录分享一个批量调用第三方接口方法。相信有很多朋友在项目中都遇到过需要批量调用第三方接口,所以今天在这里分享一下,写的不好就多多指教。
成都创新互联专注于网站建设|网站维护|优化|托管以及网络推广,积累了大量的网站设计与制作经验,为许多企业提供了网站定制设计服务,案例作品覆盖成都人造雾等行业。能根据企业所处的行业与销售的产品,结合品牌形象的塑造,量身建设品质网站。
首先,简单的介绍一下需求,判断一个电话号码的归属地,需要返回它的省份和城市。
private List // 创建线程池,这里创建了20个 ExecutorService executorService = Executors.newFixedThreadPool(20); // 保存任务的返回结果 List // 分配任务 for (String loopStr : phoneList) { // 启动多线程返回号码的城市,有返回值使用submit(),并且多线程实现callable接口 Future .submit(new UpdateCityThreadJob futureList.add(future); } // 关闭线程池 executorService.shutdown(); // 保存城市 List // 取出任务中的参数 for (Future try { // 取出任务中的结果 String city = future.get(); collection.add(city); } catch (Exception e) { throw new AppException(HttpStatus.INTERNAL_SERVER_ERROR); } } return collection; } |
// 创建任务类,因为有返回值,所以必须实现callable接口
public class UpdateCityThreadJob // 电话号码 private String phoneNumber; public UpdateCityThreadJob(String phoneNumber) { this.phoneNumber = phoneNumber; } /** * @param phoneNumber 电话号码 * @return 城市 * @Description 获取 电话号码归属地邮政信息 */ private String getCityRepeat(String phoneNumber) { String city = ""; try { city = getCity(phoneNumber); } catch (Exception e) { // 请求失败,重试五次,(防止网络原因导致请求失败) for (int i = 0; i < 5; i++) { try { city = getCity(phoneNumber); } catch (Exception e1) { continue; } } } return city; } /** * * @Description 获取城市 * @param phoneNumber 电话号码 * @return 城市 * @throws Exception */ private String getCity(String phoneNumber) throws Exception { // 请求第三方接口判断号码归属地 String result = HttpClient .doGet("http://apis.juhe.cn/mobile/get?phone=" + phoneNumber + "&dtype=xml&key=" + Constants.API_KEY);
return result; } @Override public String call() throws Exception { synchronized (phoneNumber) {
// 获取城市 String city = getCityRepeat(phoneNumber); return city; } } } |
调用第三放接口时,一般都会出现连接不稳定等等的异常,一般处理方式,都是重试几次即可。
代码是不是超级简单,只要思维清晰,什么问题都可以从容面对。。。
文章名称:多线程调用第三方接口
文章路径:http://azwzsj.com/article/gdochh.html