线程实例代码
来源:互联网 发布:房卡棋牌游戏源码教程 编辑:程序博客网 时间:2024/06/07 07:16
代码实例1:
if (StringUtils.isNotEmpty(String.valueOf(acIds))) { try { class ThreadT extends Thread{ private String acIds; public ThreadT(String acIds){ this.acIds=acIds; } @Override public void run() { SyncApToWeChat(acIds); } } new ThreadT(acIds).start(); this.sendAjaxResultByJson("{\"msg\":\"正在后台同步,请稍后查看同步状态!\"}", response); return ; } catch (Exception exception) { exception.printStackTrace(); this.sendAjaxResultByJson("{\"msg\":\"同步失败!\"}", response); return ; }}
private void SyncApToWeChat(String acIds){ ThreadPoolExecutor threadPool = new ThreadPoolExecutor(10,15 , 3, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(), new ThreadPoolExecutor.DiscardOldestPolicy()); class RunnableT implements Runnable{ private List<WeChatApiInfo> weChatApiInfo; private String acId; public RunnableT(String acId){ this.acId = acId; } @Override public void run() { Map<String,Object> paramStatus = new HashMap<>(); paramStatus.put("acIds",acId); paramStatus.put("syncStatus", WeChatEnum.WECHAT_SYNC_STATUS.ISYNC.name()); wechatAcInfoService.updateByState(paramStatus); try{ Map<String, Object> params = new HashMap<String, Object>(); params.put("acIds", acId); int count=wechatAcInfoService.selectCountByAcIds(params); int limit = 20; int page = count%20>0?count/limit+1:count/limit; boolean flag = false; for(int i =0;i<page;i++){ params.put("_start", i*limit); params.put("_end", (i+1)*limit); this.weChatApiInfo = wechatAcInfoService.selectByAcIds(params); if(null!=weChatApiInfo&&weChatApiInfo.size()>0 && weChatApiInfo.get(0).getBssid() != null){ NameValuePair[] pairs = new NameValuePair[5]; pairs[0]=new NameValuePair("requestType","post"); pairs[1]=new NameValuePair("serverUrl", WeChatEnums.WeChatServerList.SET_AP_INFO.name()); pairs[2]=new NameValuePair("isAsyn", "true");//异步处理 pairs[3]=new NameValuePair("flag", "true");//标示符 String result = null; try { pairs[4]=new NameValuePair("paramJsonData", "apList="+ URLEncoder.encode(new Gson().toJson(weChatApiInfo), "UTF-8")); result = BBlinkHttpClient.getPostResponseBodyAsString(properties.getProperty(Constant.BBLINK_WECHAT_API), pairs,"UTF-8"); LinkedHashMap param = null; if(org.apache.commons.lang3.StringUtils.isNotEmpty(result)){ param = gson.fromJson(result,LinkedHashMap.class); if(null!=param && param.containsKey("errorCode")&&0D==(Double)param.get("errorCode")){ flag=true; } } } catch ( Exception e1) { e1.printStackTrace(); paramStatus.put("syncStatus", WeChatEnum.WECHAT_SYNC_STATUS.ESYNC.name()); wechatAcInfoService.updateByState(paramStatus); break; } } } if(flag){ //查询bssid是否有空的数据,如果有则显示为部分同步,如果没有则显示已同步。 int num=wechatAcInfoService.selectCountBssidIsNull(params); if(num > 0){ paramStatus.put("syncStatus", WeChatEnum.WECHAT_SYNC_STATUS.PARTNC.name()); }else{ paramStatus.put("syncStatus", WeChatEnum.WECHAT_SYNC_STATUS.YSYNC.name()); } }else if(!flag && count ==0 ){ paramStatus.put("syncStatus", WeChatEnum.WECHAT_SYNC_STATUS.NSYNC.name()); } else { paramStatus.put("syncStatus", WeChatEnum.WECHAT_SYNC_STATUS.NSYNC.name()); } wechatAcInfoService.updateByState(paramStatus); }catch (Exception ex){ ex.printStackTrace(); paramStatus.put("syncStatus", WeChatEnum.WECHAT_SYNC_STATUS.ESYNC.name()); wechatAcInfoService.updateByState(paramStatus); } } } Map<String,Object> param = new HashMap<>(); param.put("acIds",acIds); param.put("syncStatus",WeChatEnum.WECHAT_SYNC_STATUS.WSYNC.name()); wechatAcInfoService.updateByState(param); if(org.apache.commons.lang3.StringUtils.isNotEmpty(acIds)){ String[] strs = acIds.split(","); for(String str : strs){ if(org.apache.commons.lang3.StringUtils.isNotEmpty(str)){ threadPool.execute(new RunnableT(str)); } } } while (threadPool.getQueue().size()!=0){ try { Thread.sleep(300); } catch (InterruptedException e) { e.printStackTrace(); } }}代码实例2:private void callThread(Long adId,List<WechatAdDetail> detailList,WechatAdInfo adInfo){ class ThreadT extends Thread{ private Gson gson = new Gson(); private List<WechatAdDevice> deviceList; private List<WechatAdDetail> detailList; private WechatAdInfo adInfo; private Long adId; public ThreadT(Long adId,List<WechatAdDetail> detailList,WechatAdInfo adInfo){ this.detailList=detailList; this.adInfo = adInfo; this.adId = adId; } @Override public void run() { Map<String,Object> param = new HashMap<>(); param.put("adId",adId); int count = wechatAdInfoService.selectCountByAdIdId(param); int page =0; Page<WechatAdDevice> pageParam = Page.page(count, Page.DEFAULT_PAGE_SIZE, page); param.put("_start", pageParam.getStartRows()); param.put("_end", pageParam.getEndRows()); param.put("_orderby", "ad_id"); param.put("_order", "desc"); List<String> deviceList = wechatAdInfoService.selectDeviceNoByAdId(param); Map<String, Object> paramStatus = new HashMap<>(); paramStatus.put("adId", adId); //初始化设备编号 int batchSize = 20; int deviceNoCount = count%20>0?count/batchSize+1:count/batchSize; String result = syncToWechat(deviceList,adInfo,detailList); page=1; //初始化设备编号END Map<String,Object> resultMap = gson.fromJson(result, HashMap.class); Integer requestId = null; Boolean flagCall=false; if(null!=resultMap&&resultMap.containsKey("errorCode")&& ((Double)resultMap.get("errorCode"))==0D){ if(resultMap.get("requestId") instanceof Double){ requestId = ((Double)resultMap.get("requestId")).intValue(); }else if (resultMap.get("requestId") instanceof String){ requestId = Integer.parseInt(resultMap.get("requestId")+""); } flagCall=true; } ThreadPoolExecutor threadPool = new ThreadPoolExecutor(10,15 , 3,TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(), new ThreadPoolExecutor.DiscardOldestPolicy()); if(page<=deviceNoCount){ class CallableT<String> implements Callable{ private Integer requestId; private List<String> deviceNos ; public CallableT(Integer requestId,List<String> deviceNos){ this.requestId = requestId; this.deviceNos = deviceNos; } @Override public java.lang.String call() throws Exception { NameValuePair[] pairs = new NameValuePair[6]; pairs[0] = new NameValuePair("serverUrl", WeChatServerList.BINDAD.name()); pairs[1] = new NameValuePair("requestType", "POST"); pairs[2] = new NameValuePair("flag", "true"); try { java.lang.String paramData = "adId=" + requestId + "&deviceNos="+gson.toJson(deviceNos); JSONObject json = null; pairs[3] = new NameValuePair("contentType","application/x-www-form-urlencoded"); pairs[4] = new NameValuePair("charset", "utf-8"); pairs[5] = new NameValuePair("paramJsonData",URLEncoder.encode(paramData, "UTF-8")); return BBlinkHttpClient.getPostResponseBodyAsString(properties.getProperty(Constant.BBLINK_WECHAT_API), pairs, "UTF-8"); }catch (Exception e1) { e1.printStackTrace(); } return ""; } } List<FutureTask<String>> futureTasks=new ArrayList<FutureTask<String>>(); FutureTask<String> futureTask = null; for(;page<deviceNoCount;page++){ param.put("_start", page * batchSize); param.put("_end", batchSize); param.put("_orderby", "ad_id"); param.put("_order", "desc"); deviceList = wechatAdInfoService.selectDeviceNoByAdId(param); futureTask = new FutureTask<String>(new CallableT(requestId,deviceList)); futureTasks.add(futureTask); threadPool.execute(futureTask); } while(threadPool.getCompletedTaskCount()<futureTasks.size()) { try { log.debug("threadPool.getCompletedTaskCount() size:"+threadPool.getCompletedTaskCount()); Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } continue; } threadPool.shutdownNow(); LOG.debug("FutureTask<String> size:" + futureTasks.size()); for(int i =0;i<futureTasks.size();i++){ flagCall=false; futureTask = futureTasks.get(i); if(futureTask.isDone()) { try { String resultChild = futureTask.get(); if (StringUtils.isNotEmpty(resultChild)) { LOG.debug("No:" + i + ",resultChild:" + resultChild); Map<String, Object> resultMapChild = gson.fromJson(resultChild, HashMap.class); if (null != resultMapChild && resultMapChild.containsKey("errorCode") && 0D == (double) resultMapChild.get("errorCode")) { flagCall = true; } } } catch (Exception e) { e.printStackTrace(); } } } } if(flagCall){ paramStatus.put("status", WeChatEnum.WECHAT_AD_STATUS.YSYNC.name()); paramStatus.put("requestId", requestId); }else{ paramStatus.put("status", WeChatEnum.WECHAT_AD_STATUS.NSYNC.name()); } wechatAdInfoService.updateByState(paramStatus); } } new ThreadT(adId, detailList,adInfo).start();}
0 0
- 线程实例代码
- 一个线程池实例代码的分析
- java简单线程池实例代码
- Java线程等待、通知简单实例代码
- Posix线程同步1--互斥量(含代码实例)
- Posix线程同步2--条件变量(含代码实例)
- [转载]java 代码构建线程池的实例
- (Java功能篇)java版本 线程池实例代码
- Java Concurrency代码实例之一执行者与线程池
- 线程--同步代码块、同步方法实例
- 线程实例
- 线程实例
- 线程实例
- 线程 实例
- 线程实例
- 线程代码
- 实例代码
- 代码实例
- Hibernate主键生成方式 Key Generator
- 常用排序算法及代码实现
- java 生成随机数
- 第六周--数据结构--队列的应用之报数问题
- 10个热门的Github开源项目(PKRevealController、Nimbus以及Reachability等)
- 线程实例代码
- 龙布峰针贴是否虚假销售?
- android导入工程出现红色感叹号的解决方法
- PostgreSQL 的系统表对象
- 【串项目2 - 建立链串的算法库——第8周】
- 第六周项目4数制转换
- UyHiP September 2015
- tslib 代码分析1
- 流水线