SSM線程安全問題簡述

在最早的struts2的框架中,由於當時Spring還沒有引入,項目被加載到tomcat裏,這時候前臺有1000個請求,tomcat就會給它1000個線程,由於struts2是多例的,當時後臺接值是裝載在變量裏的,這個時候由於屬性只有一份,容易造成覆蓋。並且由於struts2是多例,所以他在每一次都要1000個對象來處理訪問請求,所以,這前後要創建3000個對象。對於資源也是極大的損耗。

後來是Struts2+Spring+hibernateSSH框架中,由於spring是單例的,並且通過在方法參數中聲明對象來接收值,所以Action只要一個對象,但是servicedao層依舊是1個對象,所以總共是1002個對象。

springMVC+spring+mybatisSSM中。只需要創建3個對象。因爲SpringMVCspring都是單例的,並且每一層都是通過對象注入實現。

SpringMVC默認是單例的,所以理論上是線程不安全,他是如何解決線程安全問題的。

如圖所示。在堆內存中的方法有m1m2m3。當前臺的訪問的到來的時候,他會把這個方法拎出來執行,訪問一次,就拎出來的一次,這樣每一個m1()方法都沒有被重複使用。

並且在SSM框架中,對象直接在方法裏的參數中聲明出來的,需要就聲明一個,第一:前後臺傳值非常方便,第二:非常資源,第三:也避免了線程不安全的因素。

也是Spring的一種重要優勢和特點。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章