隨筆-50  評論-55  文章-8  trackbacks-0
          解決并發大數據量阻塞之道的重要思想是:
          利用多線程將數據接收和數據處理兩塊業務分開。
          1、數據接收
          public class MessageReceiver{
          //建立數據緩存區
          private List messageList = new ArrayList();

          //添加消息至數據緩沖區
          public? void addMessage(ESBInput inputMessage) {
          ??synchronized(messageList) {
          ??? messageList.add(inputMessage);
          ??? messageList.notifyAll();
          ??}
          ?}
          //并發數據接收入口,調用添加數據方法,而不是直接操作inputMessage,對其解析或者別的操作,不然極可能造成阻塞
          public void handleMessage(Input inputMessage) {
          ?????addMessage(inputMessage);
          ?}
          //從數據緩沖區取數據,它應該被另外一個線程調用
          public List getMessageList() {
          ??List _processList = new ArrayList();
          ??try {
          ??? synchronized (messageList) {
          ????? while (messageList.size() == 0) {
          ???? messageList.wait();
          ????? }
          ????? _processList.addAll(messageList);
          //清空緩存區
          ????? messageList.clear();
          ??? }
          ??}
          ??catch (Exception ex) {
          ???ex.printStackTrace();
          ??}
          ??return _processList;
          ?}
          }
          2、數據處理
          //線程
          public class MessageProcessThread extends Thread {
          MessageReceiver receiver;
          public MessageProcessThread (MessageReceiver receiver){
          this.receiver=receiver;
          }
          public void run() {
          ?? while (true) {
          ?? List list = receiver.getMessageList();
          ?? while (iter.hasNext()) {
          ??? //do what you want....
          ? handleMessage((Input)list .next());
          ????? try {
          ???sleep (100);
          ?? }
          ?? catch (Exception ex) {
          ??? ?}
          ?? }
          ?}
          }
          public handleMessage(Input messsage){
          ?? //處理消息
          }
          posted on 2009-01-06 10:28 蔣家狂潮 閱讀(965) 評論(0)  編輯  收藏 所屬分類: Basic
          主站蜘蛛池模板: 酒泉市| 温州市| 涡阳县| 四平市| 惠州市| 成都市| 雅安市| 云梦县| 奉化市| 繁峙县| 青神县| 平南县| 石狮市| 聂拉木县| 海口市| 博白县| 大同市| 岑溪市| 佛坪县| 泰州市| 衡阳县| 汶川县| 阿拉尔市| 济源市| 仁化县| 威远县| 资讯 | 梁河县| 永兴县| 彭山县| 聂荣县| 曲松县| 临洮县| 楚雄市| 会同县| 青阳县| 晋中市| 庆阳市| 英德市| 塔河县| 西藏|