多线程调用第三方接口

最近刚刚做完一个新项目,记录分享一个批量调用第三方接口方法。相信有很多朋友在项目中都遇到过需要批量调用第三方接口,所以今天在这里分享一下,写的不好就多多指教。

成都创新互联专注于网站建设|网站维护|优化|托管以及网络推广,积累了大量的网站设计与制作经验,为许多企业提供了网站定制设计服务,案例作品覆盖成都人造雾等行业。能根据企业所处的行业与销售的产品,结合品牌形象的塑造,量身建设品质网站。

首先,简单的介绍一下需求,判断一个电话号码的归属地,需要返回它的省份和城市。

   

       private List getUpdateDataList(List phoneList) {

// 创建线程池,这里创建了20个

ExecutorService executorService = Executors.newFixedThreadPool(20);

// 保存任务的返回结果

List> futureList = new ArrayList<>();

// 分配任务

for (String loopStr : phoneList) {

// 启动多线程返回号码的城市,有返回值使用submit(),并且多线程实现callable接口

Future future = executorService

.submit(new UpdateCityThreadJob(loopStr));

futureList.add(future);

}

// 关闭线程池

executorService.shutdown();

// 保存城市

List collection = new ArrayList<>();

// 取出任务中的参数

for (Future future : futureList) {

try {

// 取出任务中的结果

String city = future.get();

collection.add(city);

} catch (Exception e) {

throw new AppException(HttpStatus.INTERNAL_SERVER_ERROR);

}

}

return collection;

}

     // 创建任务类,因为有返回值,所以必须实现callable接口

public class UpdateCityThreadJob implements Callable {

        // 电话号码

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://pwwzsj.com/article/gdochh.html