首頁技術(shù)文章正文

Spring框架中的單例bean是線程安全的嗎?

更新時(shí)間:2023-04-20 來源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

Spring bean并沒有可變的狀態(tài)(比如Service類和DAO類),所以在某種程度上說Spring的單例bean是線程安全的。

不是線程安全的Spring框架中有一個(gè)@Scope注解,默認(rèn)的值就是singleton,單例的。因?yàn)橐话阍趕pring的bean的中都是注入無狀態(tài)的對象,沒有線程安全問題,如果在bean中定義了可修改的成員變量,是要考慮線程安全問題的,可以使用多例或者加鎖來解決。

當(dāng)多用戶同時(shí)請求一個(gè)服務(wù)時(shí),容器會給每一個(gè)請求分配一個(gè)線程,這是多個(gè)線程會并發(fā)執(zhí)行該請求對應(yīng)的業(yè)務(wù)邏輯(成員方法),如果該處理邏輯中有對該單列狀態(tài)的修改(體現(xiàn)為該單例的成員屬性),則必須考慮線程同步問題。

Spring框架并沒有對單例bean進(jìn)行任何多線程的封裝處理。關(guān)于單例bean的線程安全和并發(fā)問題需要開發(fā)者自去搞定。

比如:我們通常在項(xiàng)目中使用的Springbean都是不可可變的狀態(tài)(比如Service類和DAO類),所以在某種程度上說Spring的單例bean是線程安全的。

如果你的bean有多種狀態(tài)的話(比如ViewModel對象),就需要自行保證線程安全。最淺顯的解決辦法就是將多態(tài)bean的作用由"singleton"變更為"prototype"。

分享到:
在線咨詢 我要報(bào)名
和我們在線交談!