线程实例代码

来源:互联网 发布:房卡棋牌游戏源码教程 编辑:程序博客网 时间: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