今天在複習 springmvc 時,看到一篇文章,寫到
springmvc的控制器是不是單例模式,如果是,有什麼問題,怎麼解決?答:是單例模式,所以在多執行緒訪問的時候有執行緒安全問題,不要用同步,會影響效能的,解決方案是在控制器裡面不能寫字段。
對這個回答中的 「不能寫字段」來實現單例類中的執行緒安全不是很理解,後來通過查閱部落格和資料:得出下面這個結論
任何乙個類只要沒有成員變數,就是執行緒安全的。
解釋:
因為成員方法是每個執行緒私有的,而我們常說的執行緒安全問題就是我們通過成員方法訪問了成員變數,從而造成了執行緒之間成員變數狀態不一致的問題,所以只要沒有成員變數,就不會有不一致問題,從而也就不會有執行緒安全問題。
至於為什麼訪問了成員變數就會有執行緒安全問題: 是因為成員變數的物件分配是在堆記憶體中的,所以是為所有執行緒所共享的,所以可能會被多個執行緒同時訪問,從而造成執行緒不安全
C 定義乙個類,類的成員變數沒有指標
程式設計環境 win10,vs2017 include 01 namespace ds01 測試程式 void testdssize intmain 輸出address s1 008ff8f7 address s2 008ff8eb address s3 008ff8df 建立三個物件,三個物件的位...
C 空類以及沒有成員變數的類的大小
關於c 中空類的大小為1,我們大家都有所了解,但是除了空類之外的其他一些沒有成員變數的類的大小,還是有很多不明之處的。include usingnamespacestd classa classb classc publica classd publicb,publicc intmain 程式執行的...
C 乙個類訪問另乙個類的私有成員和保護成員
友元類 class a friend class b private int aa class b public void output cout a.aa endl private a a 使用友元類時注意 1 友元關係不能被繼承。2 友元關係是單向的,不具有交換性。若類b是類a的友元,類a不一定...