溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

多線程調(diào)用第三方接口

發(fā)布時(shí)間:2020-06-28 02:35:45 來源:網(wǎng)絡(luò) 閱讀:759 作者:鮮魚式 欄目:編程語言

最近剛剛做完一個(gè)新項(xiàng)目,記錄分享一個(gè)批量調(diào)用第三方接口方法。相信有很多朋友在項(xiàng)目中都遇到過需要批量調(diào)用第三方接口,所以今天在這里分享一下,寫的不好就多多指教。

首先,簡(jiǎn)單的介紹一下需求,判斷一個(gè)電話號(hào)碼的歸屬地,需要返回它的省份和城市。

? ?

? ? ? ?private List<String> getUpdateDataList(List<String> phoneList) {

// 創(chuàng)建線程池,這里創(chuàng)建了20個(gè)

ExecutorService executorService = Executors.newFixedThreadPool(20);

// 保存任務(wù)的返回結(jié)果

List<Future<String>> futureList = new ArrayList<>();

// 分配任務(wù)

for (String loopStr : phoneList) {

// 啟動(dòng)多線程返回號(hào)碼的城市,有返回值使用submit(),并且多線程實(shí)現(xiàn)callable接口

Future<String> future = executorService

.submit(new UpdateCityThreadJob<String>(loopStr));

futureList.add(future);

}

// 關(guān)閉線程池

executorService.shutdown();

// 保存城市

List<String> collection = new ArrayList<>();

// 取出任務(wù)中的參數(shù)

for (Future<String> future : futureList) {

try {

// 取出任務(wù)中的結(jié)果

String city = future.get();

collection.add(city);

} catch (Exception e) {

throw new AppException(HttpStatus.INTERNAL_SERVER_ERROR);

}

}

return collection;

}


? ? ?// 創(chuàng)建任務(wù)類,因?yàn)橛蟹祷刂?,所以必須?shí)現(xiàn)callable接口

public class UpdateCityThreadJob<V> implements Callable<String> {


? ? ? ? // 電話號(hào)碼

private String phoneNumber;


public UpdateCityThreadJob(String phoneNumber) {

this.phoneNumber = phoneNumber;

}


/**

* @param phoneNumber 電話號(hào)碼

* @return 城市

* @Description 獲取 電話號(hào)碼歸屬地郵政信息

*/

private String getCityRepeat(String phoneNumber) {

String city = "";

try {

city = getCity(phoneNumber);

} catch (Exception e) {

// 請(qǐng)求失敗,重試五次,(防止網(wǎng)絡(luò)原因?qū)е抡?qǐng)求失?。?/p>

for (int i = 0; i < 5; i++) {

try {

city = getCity(phoneNumber);

} catch (Exception e1) {

continue;

}

}

}

return city;

}


/**

*?

* @Description 獲取城市

* @param phoneNumber 電話號(hào)碼

* @return 城市

* @throws Exception

*/

private String getCity(String phoneNumber) throws Exception {

// 請(qǐng)求第三方接口判斷號(hào)碼歸屬地

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;

}

}


}


? ? 調(diào)用第三放接口時(shí),一般都會(huì)出現(xiàn)連接不穩(wěn)定等等的異常,一般處理方式,都是重試幾次即可。??

? ? 代碼是不是超級(jí)簡(jiǎn)單,只要思維清晰,什么問題都可以從容面對(duì)。。。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI