SpringMVC默認單例模式如何保證性能

問題:SpringMVC 默認創建 Bean 是單例的,在高併發情況下是如何保證性能的?

首先在大家的思考中,肯定有影響的,你想想,單例顧名思義:一個個排隊過...  高訪問量的時候,你能想象服務器的壓力了... 而且用戶體驗也不怎麼好,等待太久~

實質上這種理解是錯誤的,Java裏有個API叫做 ThreadLocal,Spring 單例模式下用它來切換不同線程之間的參數。用ThreadLocal是爲了保證線程安全,實際上ThreadLoacal的key就是當前線程的Thread實例。單例模式下,Spring 把每個線程可能存在線程安全問題的參數值放進了 ThreadLocal。這樣雖然是一個實例在操作,但是不同線程下的數據互相之間都是隔離的,因爲運行時創建和銷燬的 Bean 大大減少了,所以大多數場景下這種方式對內存資源的消耗較少,而且併發越高優勢越明顯。

總的來說就是,單利模式因爲大大節省了實例的創建和銷燬,有利於提高性能,而ThreadLocal用來保證線程安全性。單例模式是spring推薦的配置,它在高併發下能極大的節省資源,提高服務抗壓能力

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