1、實現演變過程
這就是現在訊息物件web框架的單例原理,建立乙個map為所有執行緒公用,用執行緒id來區分資料,自己只能取自己執行緒的資料。下面看實現過程。
2、實現
許多多執行緒實現是用了threadloacal來實現資料共享,但在我這裡沒有用。因為訊息物件框架乙個特點是所有的模組都由工廠建立,並且建立後工廠把自己放入所有模組裡,工廠成為其所建立模組的乙個屬性,工廠本身就是個共享資料了。借助這個特點,工廠的資料就自然可以被其他模組或執行緒使用了。現在看**:
這是tomcat過濾器,用於將所有訪問轉到框架,過濾器負責啟動工廠,框架開始執行。
public class tlfilterwithsinglefactory implements filter
public void destroy()
public void dofilter(servletrequest req, servletresponse resp, filterchain chain) throws servletexception, ioexception
protected void registinfactory(tlobjectfactory modulefactory, string name, object object)
}
工廠例項化後,通過 registinfactory(modulefactory, "servletrequest", requestmap) 方法,將建立的全域性變數儲存到工廠裡面,這樣其他模組就可以訪問這些資料了。
有客戶端訪問時,過濾器開始工作, 執行dofilter方法,在其方法內,對於每個執行緒的資料,儲存到共享資料裡。
requestmap.put(threadname, request);
responsemap.put(threadname, response);
這樣執行緒的其他模組就可以通過工廠獲得自己執行緒的資料。在基本模組tlwservmodule裡:
例如獲得requet:
protected httpservletrequest getrequest()
**非常簡單,首先從工廠中獲得共享資料requesmap,然後根據自己的執行緒名稱獲取自己的資料。由於只是取自己的資料,因此不涉及執行緒資料競爭問題。
如果像把資料儲存起來給其他模組用,那麼可以存入共享資料中:
protected void setsessiondata(string varname ,object value)
其他模組可以在任意地方取自己執行緒的資料:
protected object getsessiondata(string varname)
框架的單例有效節省了記憶體,提高了效率。 統一物件訊息程式設計(7) 物件訊息程式設計框架4
模組工廠 tlobjectfactory 負責模組的建立 初始化和儲存。每次程式執行,首先例項化模組工廠,然後由模組工廠啟動主模組。原始碼 public class tlobjectfactory extends tlbasemodule public void destroymodule over...
Visual C 程式設計技巧 訊息框和對話方塊
1.如何在視窗程式中建立訊息框 2.如何使用資源字串設定訊息框內容 3.如何在訊息框中動態顯示資源字串 4.如何設定訊息提示框的標題文字 5.如何使訊息提示框的標題右對齊 6.如何在訊息提示框中繪製 7.如何在訊息提示框中設定圖示 8.如何在訊息提示框中顯示問號圖示 9.如何在訊息提示框中設定按鈕 ...
統一物件訊息程式設計詳解 定時任務模組的命令列控制台
前面文字介紹了定時任務模組,我們可以通過配置檔案的動態配置來控制任務的行為。由於配置檔案的動態更新是所有配置引數都重新更新,對於多執行緒的,某些情況下會影響到其他任務。如我們對任務a進行了restart 下次我們對任務b進行shutdown,如果我們忘記將a的狀態改為run,則a再次restart。...