keep moving!

          We must not cease from exploration. And the end of all our exploring will be to arrive where we began and to know the place for the first time.
          隨筆 - 37, 文章 - 2, 評(píng)論 - 3, 引用 - 0
          數(shù)據(jù)加載中……

          Design Pattern: Thread-Per-Message 模式

          Thread-Per-Message模式是一個(gè)很簡單但很常應(yīng)用的模式,尤其是在GUI程式中,我們舉個(gè)例子,當(dāng)您設(shè)計(jì)一個(gè)文件編輯器時(shí),您可能像這樣註冊(cè)一個(gè)開啟檔案的事件處理:
           menuOpenFile.addActionListener(
              new ActionListener() {
                  public void actionPerformed(ActionEvent e) {
                      openFile();
                  }
              }
           );
           

          openFile()方法中主要是開啟檔案、一行一行讀檔案文字並設(shè)定文字至文字區(qū)域中,這樣設(shè)計(jì)基本上沒有什麼問題,例如果您的文件內(nèi)容很長,在讀檔必須花費(fèi)一些時(shí)間時(shí),您會(huì)發(fā)現(xiàn)在檔案讀取完畢前,您的視窗會(huì)有明顯的停頓現(xiàn)象。
           menuOpenFile.addActionListener(
              new ActionListener() {
                  public void actionPerformed(ActionEvent e) {
                      new Thread(new Runnable(){
                          public void run() {
                              openFile();
                          }
                      }).start();
                  }
              }
           );
           
          在事件發(fā)生之後,您將檔案處理的動(dòng)作交由一個(gè)執(zhí)行緒去執(zhí)行,而事件處理執(zhí)行緒直接回到回應(yīng)事件的狀態(tài),如此即可解決視窗在載入檔案時(shí)的停頓。

          簡單的說,Thread-Per-Message模式是在某個(gè)請(qǐng)求發(fā)生時(shí),新增一個(gè)執(zhí)行緒來執(zhí)行該請(qǐng)求,而主執(zhí)行緒繼續(xù)往下執(zhí)行,除了上面的載入檔案例子之外,像是進(jìn)行搜尋、字串轉(zhuǎn)換之類需要一些時(shí)間來執(zhí)行的工作時(shí),使用Thread-Per-Message模式都可以提高主執(zhí)行緒(界面)的回應(yīng)性。




          文章來源:http://www.aygfsteel.com/jesson2005/articles/111198.html

          posted on 2008-09-07 11:06 大石頭 閱讀(202) 評(píng)論(0)  編輯  收藏 所屬分類: 多線程

          主站蜘蛛池模板: 红安县| 荔波县| 山西省| 图片| 克什克腾旗| 昭通市| 华亭县| 饶河县| 梅州市| 敖汉旗| 永修县| 华安县| 荥阳市| 专栏| 灵武市| 贡觉县| 米泉市| 名山县| 社旗县| 松潘县| 巢湖市| 长春市| 东乡族自治县| 正镶白旗| 常山县| 巴楚县| 柘城县| 三都| 云霄县| 阿拉尔市| 郓城县| 辽宁省| 阿瓦提县| 桃源县| 山丹县| 五大连池市| 昭通市| 澄城县| 孟津县| 黄石市| 应城市|