Design Pattern: Thread-Per-Message 模式
Thread-Per-Message模式是一個(gè)很簡單但很常應(yīng)用的模式,尤其是在GUI程式中,我們舉個(gè)例子,當(dāng)您設(shè)計(jì)一個(gè)文件編輯器時(shí),您可能像這樣註冊(cè)一個(gè)開啟檔案的事件處理:
openFile()方法中主要是開啟檔案、一行一行讀檔案文字並設(shè)定文字至文字區(qū)域中,這樣設(shè)計(jì)基本上沒有什麼問題,例如果您的文件內(nèi)容很長,在讀檔必須花費(fèi)一些時(shí)間時(shí),您會(huì)發(fā)現(xiàn)在檔案讀取完畢前,您的視窗會(huì)有明顯的停頓現(xiàn)象。
簡單的說,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
menuOpenFile.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
openFile();
}
}
);
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í)的停頓。new ActionListener() {
public void actionPerformed(ActionEvent e) {
new Thread(new Runnable(){
public void run() {
openFile();
}
}).start();
}
}
);
簡單的說,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)性。
張金鵬 2007-04-17 10:56 發(fā)表評(píng)論
文章來源:http://www.aygfsteel.com/jesson2005/articles/111198.html
posted on 2008-09-07 11:06 大石頭 閱讀(202) 評(píng)論(0) 編輯 收藏 所屬分類: 多線程