Dict.CN 在線詞典, 英語學習, 在線翻譯

          都市淘沙者

          荔枝FM Everyone can be host

          統計

          留言簿(23)

          積分與排名

          優秀學習網站

          友情連接

          閱讀排行榜

          評論排行榜

          常用的多線程異步處理


          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();
          //通知處理新任務
                      }

                  }


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

                                  
          if (list.size() > 0{    //存在需要處理的任務
                                      pb = list.remove(0);  //將任務移出隊列,并執行業務邏輯
                                      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();
          //等待任務
                                  }

                              }


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

                      }


                  }

              }


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

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

                  
          return instance;
              }


              
          int max = 20;    //創建線程最大數目
              SubProc[] procs = null

              
          //初始化創建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為業務中參數的封裝Bean,利用hashCode來處理
              
          //將統一用戶的調用放到一個線程統一處理,類似將同一用戶的訪問排隊
              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中調用:
              //ation中調用
              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/開源資料

          主站蜘蛛池模板: 贵州省| 宁南县| 扶沟县| 大石桥市| 都昌县| 烟台市| 文安县| 呈贡县| 侯马市| 凤冈县| 阿克苏市| 东海县| 光山县| 平远县| 顺平县| 含山县| 浪卡子县| 共和县| 大宁县| 甘德县| 宜川县| 扎囊县| 平谷区| 南和县| 塔城市| 瑞丽市| 郧西县| 故城县| 湛江市| 罗源县| 神木县| 安泽县| 荆门市| 乌兰县| 江西省| 揭东县| 图片| 德清县| 增城市| 石嘴山市| 原平市|