Dict.CN 在線詞典, 英語學(xué)習, 在線翻譯

          都市淘沙者

          荔枝FM Everyone can be host

          導(dǎo)航

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          公告


          我的blog中的部分資源是來自于網(wǎng)絡(luò)上,如果你認為侵犯了你的權(quán)利,請及時聯(lián)系jelver#163.com,我會盡快刪除!另外如果要留言最好通過郵件的形式跟我交流因為我不是很經(jīng)常寫文章,前面有的朋友留言好久了我才發(fā)現(xiàn),所以對不住大家,現(xiàn)在留下MSN:jelver#163.com和QQ:253840881,歡迎交流! (用@代替#)

          隨筆分類

          文章分類

          隨筆檔案

          文章檔案

          相冊

          統(tǒng)計

          留言簿(23)

          積分與排名

          優(yōu)秀學(xué)習網(wǎng)站

          友情連接

          閱讀排行榜

          評論排行榜

          常用的多線程異步處理


          package cn.allinpalm.sns.app.web.point.action;

          import java.util.LinkedList;

          import org.apache.log4j.Logger;
          import cn.allinpalm.sns.app.web.constants.Config;
          import cn.allinpalm.sns.app.web.point.service.PointOptService;
          import cn.allinpalm.sns.app.web.util.ParamBean;

          public class Proccessor {

              
          private static Logger log = Logger.getLogger(Proccessor.class);

              
          class SubProc implements Runnable {

                  LinkedList
          <ParamBean> list = new LinkedList<ParamBean>();

                  
          void add(ParamBean pb) {
                      
          synchronized (list) {
                          list.add(pb);
                          list.notify();
          //通知處理新任務(wù)
                      }

                  }


                  
          public void run() {
                      ParamBean pb 
          = null;
                      
          while (true{
                          
          try {
                              
          synchronized (list) {

                                  
          if (list.size() > 0{    //存在需要處理的任務(wù)
                                      pb = list.remove(0);  //將任務(wù)移出隊列,并執(zhí)行業(yè)務(wù)邏輯
                                      UserOptAction.initPointUserOpt(pb);
                                      
          if (pb != null && (pb.getOptway()).equals(Config.addPointOpt)) {

                                          PointOptService.userPointAdd(pb);
                                      }
           else if (pb != null
                                              
          && (pb.getOptway())
                                                      .equals(Config.consumePointOpt)) 
          {
                                          PointOptService.userPointConsume(pb);
                                      }
                               
                                      
                                  }
           else {
                                      list.wait();
          //等待任務(wù)
                                  }

                              }


                          }
           catch (InterruptedException e) {
                              
          break;
                          }
           catch (Exception e) {
                              
          break;
                          }

                      }


                  }

              }


              
          //單態(tài)模式取得實例變量并初始化
              private static Proccessor instance = null;

              
          public static Proccessor getInstance() {
                  
          if (instance == null{
                      instance 
          = new Proccessor();
                      instance.init();
                  }

                  
          return instance;
              }


              
          int max = 20;    //創(chuàng)建線程最大數(shù)目
              SubProc[] procs = null

              
          //初始化創(chuàng)建20個SubProc對象線程,并啟動
              private void init() {
                  procs 
          = new SubProc[max];
                  
          for (int i = 0; i < max; i++{
                      procs[i] 
          = new SubProc();
                      
          new Thread(procs[i]).start();
                  }

              }


              
          //ParamBean為業(yè)務(wù)中參數(shù)的封裝Bean,利用hashCode來處理
              
          //將統(tǒng)一用戶的調(diào)用放到一個線程統(tǒng)一處理,類似將同一用戶的訪問排隊
              public void dispatch(ParamBean pb) {

                  
          if (pb != null && procs != null{
                      
          int i = pb.getUserid().hashCode() % max; 
                      
          if (i < 0{
                          i 
          = -i;
                      }

                      procs[i].add(pb);  
          //加入線程中處理
                  }

              }


          }

          aciont中調(diào)用:
              //ation中調(diào)用
              public ActionForward userPointAddOpt(ActionMapping mapping,
                      ActionForm form, HttpServletRequest request,
                      HttpServletResponse response) 
          throws Exception {

                  ParamBean pb 
          = getParamBeanPk(request, response);                 
                  Proccessor.getInstance().dispatch(pb);
                  
              }

          posted on 2008-03-07 14:13 都市淘沙者 閱讀(2608) 評論(0)  編輯  收藏 所屬分類: Java Basic/Lucene/開源資料

          主站蜘蛛池模板: 东乌珠穆沁旗| 库车县| 青田县| 德保县| 柳州市| 马鞍山市| 绥滨县| 垣曲县| 临漳县| 泰来县| 隆尧县| 榆社县| 鄂伦春自治旗| 武陟县| 益阳市| 禄丰县| 茶陵县| 梅州市| 宜兴市| 阿克| 江油市| 中江县| 赞皇县| 呼图壁县| 资中县| 苏尼特右旗| 五原县| 涿鹿县| 贵港市| 乡宁县| 河源市| 宝坻区| 泗阳县| 成都市| 土默特左旗| 特克斯县| 拜泉县| 慈溪市| 如东县| 鄂托克旗| 东源县|