コールサードパーティのインタフェースをマルチスレッド

最近、新しいプロジェクト、コールボリューム・レコード・共有して、サードパーティ製のインターフェイスのメソッドを終えました。私は私の友人の多くはひどく展示会に書かれたあなたと共有し、今日ので、ここでは、ボリュームのサードパーティのインターフェースを呼び出すために、プロジェクトの必要性に直面していると考えています。

まず、需要を簡単に見ては、裁判官の自宅の電話番号、必要性は、その省や都市に戻ります。

   

       プライベートリスト<文字列> getUpdateDataList(一覧<文字列> PhoneListとして){

//ここ20を作成したスレッドプールを作成

ExecutorServiceのExecutorServiceの= Executors.newFixedThreadPool(20)。

//保存タスクは、結果を返します

一覧<今後の<string >> futureList =新しいArrayListを<>();

//割り当てタスク

{(PhoneListとして文字列loopStr)のために

//スタートマルチスレッド都市の数を返し、そこ提出()を使用して、戻り値であり、呼び出し可能インタフェースをマルチスレッド

将来の<文字列>未来= ExecutorServiceの

.submit(新しいUpdateCityThreadJob <文字列>(loopStr));

futureList.add(未来)。

}

//スレッドプールを閉じます

executorService.shutdown();

//街を救います

一覧<文字列>コレクション=新しいArrayListを<>();

//アウトタスクパラメータ

{:(futureList未来の<文字列>未来)について

{試します

//タスクの結果を削除します

文字列の街= future.get();

collection.add(都市);

}キャッチ(例外e){

throw new AppException(HttpStatus.INTERNAL_SERVER_ERROR);

}

}

return collection;

}


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

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


        // 电话号码

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;

}

}


}


    调用第三放接口时,一般都会出现连接不稳定等等的异常,一般处理方式,都是重试几次即可。  

    代码是不是超级简单,只要思维清晰,什么问题都可以从容面对。。。

おすすめ

転載: blog.51cto.com/13306517/2453371