Thread-Per-Message模式是一個很簡單但很常應(yīng)用的模式,尤其是在GUI程式中,我們舉個例子,當(dāng)您設(shè)計一個文件編輯器時,您可能像這樣註冊一個開啟檔案的事件處理:
menuOpenFile.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
openFile();
}
}
);
openFile()方法中主要是開啟檔案、一行一行讀檔案文字並設(shè)定文字至文字區(qū)域中,這樣設(shè)計基本上沒有什麼問題,例如果您的文件內(nèi)容很長,在讀檔必須花費一些時間時,您會發(fā)現(xiàn)在檔案讀取完畢前,您的視窗會有明顯的停頓現(xiàn)象。
menuOpenFile.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
new Thread(new Runnable(){
public void run() {
openFile();
}
}).start();
}
}
);
在事件發(fā)生之後,您將檔案處理的動作交由一個執(zhí)行緒去執(zhí)行,而事件處理執(zhí)行緒直接回到回應(yīng)事件的狀態(tài),如此即可解決視窗在載入檔案時的停頓。
簡單的說,Thread-Per-Message模式是在某個請求發(fā)生時,新增一個執(zhí)行緒來執(zhí)行該請求,而主執(zhí)行緒繼續(xù)往下執(zhí)行,除了上面的載入檔案例子之外,像是進(jìn)行搜尋、字串轉(zhuǎn)換之類需要一些時間來執(zhí)行的工作時,使用Thread-Per-Message模式都可以提高主執(zhí)行緒(界面)的回應(yīng)性。