最近、新しいプロジェクト、コールボリューム・レコード・共有して、サードパーティ製のインターフェイスのメソッドを終えました。私は私の友人の多くはひどく展示会に書かれたあなたと共有し、今日ので、ここでは、ボリュームのサードパーティのインターフェースを呼び出すために、プロジェクトの必要性に直面していると考えています。
まず、需要を簡単に見ては、裁判官の自宅の電話番号、必要性は、その省や都市に戻ります。
プライベートリスト<文字列> 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; } } } |
调用第三放接口时,一般都会出现连接不稳定等等的异常,一般处理方式,都是重试几次即可。
代码是不是超级简单,只要思维清晰,什么问题都可以从容面对。。。