91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java 單例模式線程安全問題

發布時間:2020-08-19 14:20:31 來源:腳本之家 閱讀:271 作者:flycw 欄目:編程語言

Java 單例模式線程安全問題

SpringIOC容器默認提供bean的訪問作用域是單例模式。即在整個application生命周期中,只有一個instance。因此在多線程并發下,會有線程安全風險。我們在MVC框架下的servlet就是線程安全的。由于該servlet是在客戶端,多并發相對少,但是對于web service端,需要考慮到。

ThreadLocal類:為每一個線程提供了一個獨立的變量(實例)副本,從各將各個不同的實例訪問isolation。
在同步鎖機制中,后來者線程等待先行線程完成后,才能訪問該成員變量。而ThreadLocal實現實例的復制而隔離對象訪問數據沖突。同時也能夠少量解決scope為prototype訪問模式下大量實例生命周期管理的消耗和負擔。是“以時間換空間”和“以空間換時間”的兩種實現。前者僅提供唯一變量,讓不同的線程排隊訪問,而后者為每一個線程都提供了一份拷貝,因此可以同時訪問而互不影響,同時該拷貝存儲于內存中,下次再次訪問時候不再重新生成實例,減少服務器資源消耗。 

我們知道在一般情況下,只有無狀態的Bean才可以在多線程環境下共享,在Spring中,絕大部分Bean都可以聲明為singleton作用域。就是因為Spring對一些Bean(如RequestContextHolder、TransactionSynchronizationManager、LocaleContextHolder等)中非線程安全狀態采用ThreadLocal進行處理,讓它們也成為線程安全的狀態,因為有狀態的Bean就可以在多線程中共享了。

線程安全問題:由全局變量及靜態變量引起,若每個線程中對全局變量、靜態變量只有讀操作,而無寫操作,一般來說,這個全局變量是線程安全的;若有多個線程同時執行寫操作,一般都需要考慮線程同步,否則就可能影響線程安全。

1) 常量始終是線程安全的 (值恒定)
2)每次調用方法前都新建一個實例是線程安全的。(不同實例相互隔離)
3)局部變量是線程安全的(隔離)

因為每執行一個方法,都會在獨立的空間創建局部變量,它不是共享的資源。局部變量包括方法的參數變量和方法內變量。

有狀態:有數據存儲、更改功能。有狀態對象(Stateful Bean),有實例變量的對象  ,可以保存數據,是非線程安全的。

無狀態:就是一次操作,不能變更數據。無狀態對象(Stateless Bean),沒有實例變量的對象,不能保存數據,是不變類,是線程安全的。在spring中單例模式是共享實例,以達到提高性能。有狀態的Bean,多線程環境下不安全,那么適合用Prototype原型模式。Prototype: 每次對bean的請求都會創建一個新的bean實例。

如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

葫芦岛市| 休宁县| 同心县| 漳浦县| 新巴尔虎右旗| 个旧市| 荣成市| 镇宁| 盱眙县| 凉山| 龙游县| 静海县| 临朐县| 康保县| 彭泽县| 错那县| 马边| 霍城县| 启东市| 南通市| 彰武县| 阳高县| 九江市| 安远县| 巴彦淖尔市| 泰顺县| 肇源县| 左云县| 蓝田县| 浦县| 东阿县| 台安县| 施秉县| 余干县| 山东| 韶山市| 阿合奇县| 怀化市| 阿拉善盟| 东方市| 成安县|