常見框架單例 多例 與 執行緒安全性總結

2021-07-24 19:36:39 字數 1018 閱讀 2039

單例與多例問題是指,當多個使用者訪問某個類時,系統是為每個使用者建立乙個該類例項,還是整個系統無論多少使用者訪問,只建立乙個該類例項。

執行緒安全問題是指,多個使用者同時在訪問同乙個程式時,其對於某一資料的修改,會不會影響到其他使用者中的該資料。若沒有影響,則是執行緒安全的;若有可能影響,則是執行緒不安全的。

現在對 httpservlet、httpsession、spingmvc、struts2 中的 action、hibernate 中的 sessionfactory與 session,進行總結。

其是單例的。即無論多少使用者訪問同乙個業務,如 loginservlet,web 容器只會建立乙個該 servlet 例項。而該例項是允許多使用者訪問的。

若 servlet 中包含成員變數,則每個使用者對於成員變數的修改,均會影響到其他使用者所看到的該變數的值,所以這時是執行緒不安全的。若不包含成員變數,則是執行緒安全的。

spring mvc controller預設是單例的:

單例的原因有二:

1、為了效能。2、不需要多例。

如果需要多例,則需要在controller類上加註解 @scope("prototype")

(4)struts2 的 action

(5)hibernate 的 sessionfactory

其是單例的。無論多少使用者訪問該專案,系統只會建立乙個 sessionfactory 物件,即這個物件是可以被所有使用者訪問的。

sessionfactory實現類中所包含的成員變數基本都是 final常量,即任何使用者均不能修改。所以,也就不存在使用者的修改對其他使用者的影響問題了,所以是執行緒安全的。 

(6)hibernate 的 session

其是多例的。系統會為每個使用者建立乙個 sessio。

session 的實現類中定義了很多的非 final 成員變數,乙個事務對成員變數所做的修改,會影響到另乙個事務對同一資料的訪問結果,所以是執行緒不安全的。 

單例模式的執行緒安全性

單例模式是設計模式中比較簡單的一種。適合於乙個類只有乙個例項的情況,比如視窗管理器,列印緩衝池和檔案系統,它們都是原型的例子。典型的情況是,那些物件的型別被遍及乙個軟體系統的不同物件訪問,因此需要乙個全域性的訪問 指標,這便是眾所周知的單例模式的應用。經典的單例模式有三種,懶漢式 餓漢式和懶漢式單例...

多執行緒下的單例模式安全性

public class singletondemo public static singletondemo getinstace return instace public static void main string args main方法只進入一次,說明只new了一次物件。getinstan...

java 單例模式與執行緒安全性問題

餓漢式就是在變數申明的時候就完成初始化工作 優點 沒有執行緒安全性問題 缺點 在程式載入時,單例模式的實體就已經被建立了,存在效能問題 public class singleton private static singleton instance new singleton public stat...