隨筆-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 蔣家狂潮 閱讀(975) 評論(0)  編輯  收藏 所屬分類: Basic
          主站蜘蛛池模板: 荆门市| 城固县| 昌平区| 嫩江县| 济阳县| 侯马市| 巢湖市| 绥阳县| 平顺县| 许昌县| 桑植县| 大方县| 舟曲县| 渝北区| 阳东县| 许昌县| 岐山县| 乐陵市| 奈曼旗| 革吉县| 淅川县| 柳河县| 丰台区| 芦山县| 菏泽市| 甘谷县| 亳州市| 澄江县| 新巴尔虎左旗| 吴川市| 岫岩| 龙海市| 贺州市| 格尔木市| 沭阳县| 岑溪市| 织金县| 绿春县| 出国| 尖扎县| 西吉县|