日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

淺談Spring中單例Bean是線程安全的嗎

瀏覽:165日期:2023-08-09 16:03:14

Spring容器中的Bean是否線程安全,容器本身并沒有提供Bean的線程安全策略,因此可以說Spring容器中的Bean本身不具備線程安全的特性,但是具體還是要結(jié)合具體scope的Bean去研究。

Spring 的 bean 作用域(scope)類型

1、singleton:單例,默認(rèn)作用域。

2、prototype:原型,每次創(chuàng)建一個(gè)新對象。

3、request:請求,每次Http請求創(chuàng)建一個(gè)新對象,適用于WebApplicationContext環(huán)境下。

4、session:會(huì)話,同一個(gè)會(huì)話共享一個(gè)實(shí)例,不同會(huì)話使用不用的實(shí)例。

5、global-session:全局會(huì)話,所有會(huì)話共享一個(gè)實(shí)例。

線程安全這個(gè)問題,要從單例與原型Bean分別進(jìn)行說明。

原型Bean

對于原型Bean,每次創(chuàng)建一個(gè)新對象,也就是線程之間并不存在Bean共享,自然是不會(huì)有線程安全的問題。

單例Bean

對于單例Bean,所有線程都共享一個(gè)單例實(shí)例Bean,因此是存在資源的競爭。

如果單例Bean,是一個(gè)無狀態(tài)Bean,也就是線程中的操作不會(huì)對Bean的成員執(zhí)行查詢以外的操作,那么這個(gè)單例Bean是線程安全的。比如Spring mvc 的 Controller、Service、Dao等,這些Bean大多是無狀態(tài)的,只關(guān)注于方法本身。

有狀態(tài)對象(Stateful Bean) :就是有實(shí)例變量的對象,可以保存數(shù)據(jù),是非線程安全的。每個(gè)用戶有自己特有的一個(gè)實(shí)例,在用戶的生存期內(nèi),bean保持了用戶的信息,即“有狀態(tài)”;一旦用戶滅亡(調(diào)用結(jié)束或?qū)嵗Y(jié)束),bean的生命期也告結(jié)束。即每個(gè)用戶最初都會(huì)得到一個(gè)初始的bean。

無狀態(tài)對象(Stateless Bean):就是沒有實(shí)例變量的對象,不能保存數(shù)據(jù),是不變類,是線程安全的。bean一旦實(shí)例化就被加進(jìn)會(huì)話池中,各個(gè)用戶都可以共用。即使用戶已經(jīng)消亡,bean 的生命期也不一定結(jié)束,它可能依然存在于會(huì)話池中,供其他用戶調(diào)用。由于沒有特定的用戶,那么也就不能保持某一用戶的狀態(tài),所以叫無狀態(tài)bean。但無狀態(tài)會(huì)話bean 并非沒有狀態(tài),如果它有自己的屬性(變量),那么這些變量就會(huì)受到所有調(diào)用它的用戶的影響,這是在實(shí)際應(yīng)用中必須注意的。

對于有狀態(tài)的bean,Spring官方提供的bean,一般提供了通過ThreadLocal去解決線程安全的方法,比如RequestContextHolder、TransactionSynchronizationManager、LocaleContextHolder等。

使用ThreadLocal的好處

使得多線程場景下,多個(gè)線程對這個(gè)單例Bean的成員變量并不存在資源的競爭,因?yàn)門hreadLocal為每個(gè)線程保存線程私有的數(shù)據(jù)。這是一種以空間換時(shí)間的方式。

當(dāng)然也可以通過加鎖的方法來解決線程安全,這種以時(shí)間換空間的場景在高并發(fā)場景下顯然是不實(shí)際的。

補(bǔ)充知識(shí):Spring Bean Scope 有狀態(tài)的Bean 無狀態(tài)的Bean

在Spring的Bean配置中,存在這樣兩種情況:

<bean scope='singleton' />

<bean scope='prototype' />

當(dāng)然,scope的值不止這兩種,還包括了request,session 等。但用的最多的還是singleton單態(tài),prototype多態(tài)。

singleton表示該bean全局只有一個(gè)實(shí)例,Spring中bean的scope默認(rèn)也是singleton.

prototype表示該bean在每次被注入的時(shí)候,都要重新創(chuàng)建一個(gè)實(shí)例,這種情況適用于有狀態(tài)的Bean.

對于SSH架構(gòu)的系統(tǒng),很少關(guān)心這方面,因?yàn)槲覀冇玫降囊话愣际莝ingleton. Bean的注入由Spring管理。

對于有狀態(tài)的Bean呢?

下面是一個(gè)有狀態(tài)的Bean

package com.sw;public class TestManagerImpl implements TestManager{ private User user; public void deleteUser(User e) throws Exception { user = e ; //1 prepareData(e); } public void prepareData(User e) throws Exception { user = getUserByID(e.getId()); //2 ..... //使用user.getId(); //3 ..... ..... } }

如果該Bean配置為singleton,會(huì)出現(xiàn)什么樣的狀況呢?

如果有2個(gè)用戶訪問,都調(diào)用到了該Bean.

假定為user1,user2

當(dāng)user1 調(diào)用到程序中的1步驟的時(shí)候,該Bean的私有變量user被付值為user1

當(dāng)user1的程序走到2步驟的時(shí)候,該Bean的私有變量user被重新付值為user1_create

理想的狀況,當(dāng)user1走到3步驟的時(shí)候,私有變量user應(yīng)該為user1_create;

但如果在user1調(diào)用到3步驟之前,user2開始運(yùn)行到了1步驟了,由于單態(tài)的資源共享,則私有變量user被修改為user2

這種情況下,user1的步驟3用到的user.getId()實(shí)際用到是user2的對象。

而如果是prototype的話,就不會(huì)出現(xiàn)資源共享的問題。

對于SSH來說,Bean的配置是沒錯(cuò)的,配置為singleton ;實(shí)際應(yīng)該是這個(gè)例子不應(yīng)該用私有變量。這樣就使得這個(gè)Bean

由無狀態(tài)變成了有狀態(tài)Bean.還是應(yīng)該盡量使用無狀態(tài)Bean.如果在程序中出現(xiàn)私有變量,盡量替換為參數(shù)。對于每個(gè)訪問私有變量的方法增加變量傳入或者通過ThreadLocal來獲取也是不錯(cuò)的方法。

真正出現(xiàn)上面代碼問題的也是少數(shù),出現(xiàn)的時(shí)候,一般是為了圖方便,一個(gè)很多方法都要用到的變量,如果都需要用參數(shù)的

方式傳遞多麻煩呀,這樣私有變量多好,不用參數(shù)那樣丑陋。但是丑陋并不代表不好,以對的,自己習(xí)慣的方式編程,才能

盡量避免問題的發(fā)生。

以上這篇淺談Spring中單例Bean是線程安全的嗎就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Spring
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
视频在线观看一区二区三区| 91精品一区二区三区综合| 日韩午夜免费| 欧美日韩精品一本二本三本| 少妇精品久久久一区二区| 亚洲一级在线| 日韩精品欧美精品| 亚洲精品观看| 国产精久久久| 国产中文欧美日韩在线| 久久久精品网| 欧美 日韩 国产一区二区在线视频 | 国产精品多人| 久久久久久一区二区| 国产精品任我爽爆在线播放| 久久香蕉精品香蕉| 欧美日韩精品免费观看视完整| 久久久久久久久99精品大| 亚洲爱爱视频| 免费观看久久久4p| 911亚洲精品| 精品视频在线你懂得| 韩日一区二区| 欧美亚洲在线日韩| 亚洲第一精品影视| 中文精品在线| 久久av日韩| 欧美一区二区性| 日本不卡一二三区黄网| 国产福利片在线观看| 蜜芽一区二区三区| 欧美激情在线精品一区二区三区| 91亚洲成人| 日韩av在线免费观看不卡| 国产a亚洲精品| 亚洲一区av| 三上悠亚国产精品一区二区三区| 免费观看在线综合| 国产高清不卡| 午夜电影一区| 国产乱码精品一区二区三区四区| 久久久精品五月天| 久久精品二区亚洲w码| 日韩不卡免费视频| 久久精品亚洲人成影院| 欧美极品一区二区三区| 亚洲一区二区网站| 国产精品亚洲四区在线观看 | 91av一区| 国产亚洲精品精品国产亚洲综合 | 91高清一区| 老牛影视精品| 色婷婷成人网| 四虎国产精品免费观看| 免费人成精品欧美精品| 久久av网址| 日韩欧美高清一区二区三区| 国产一区二区精品| 精品国产aⅴ| 成人精品国产亚洲| 欧美极品一区二区三区| 午夜精品影视国产一区在线麻豆| 偷拍精品精品一区二区三区| 日本强好片久久久久久aaa| 亚洲91在线| 久久xxxx| 亚洲天堂日韩在线| 国内精品福利| 亚洲在线观看| 亚洲精品影视| 亚洲ww精品| 亚洲欧美日韩国产一区| 亚洲欧美久久| 亚洲一区二区三区在线免费| 欧美日本精品| 福利一区二区| 在线看片国产福利你懂的| 日本一区二区免费高清| 成人一区而且| 日韩免费av| 亚洲天堂黄色| 亚洲综合中文| 亚洲毛片在线免费| 欧美精品福利| 精品三区视频| 亚洲免费观看| 91福利精品在线观看| 日韩高清不卡在线| 黑人精品一区| 亚洲日本国产| 国产麻豆一区二区三区精品视频| 久久天堂影院| 激情自拍一区| 亚洲一区有码| 欧美片第1页| 乱人伦精品视频在线观看| 先锋影音久久久| 亚洲欧美网站在线观看| 激情中国色综合| 丝袜美腿成人在线| 九九99久久精品在免费线bt| 免费日韩av片| 韩国久久久久久| 麻豆亚洲精品| 亚洲电影在线| 国产福利一区二区三区在线播放| 国产一区二区三区久久 | 精品视频在线一区二区在线| 亚洲欧美日本视频在线观看| 精品国产一区二区三区噜噜噜| 一区二区高清| www.com.cn成人| 亚洲久草在线| 亚洲五月综合| 在线视频日韩| 狠狠久久伊人中文字幕| 国产精品一区二区中文字幕| 久久九九精品| 国产午夜久久av| 国产伦精品一区二区三区千人斩 | 综合国产精品| 日韩精品不卡一区二区| 日本中文字幕视频一区| 香蕉国产精品| 99久久精品网| 国产一二在线播放| 91麻豆国产自产在线观看亚洲| 中文字幕一区二区精品区| 色婷婷亚洲mv天堂mv在影片| 国产一区国产二区国产三区 | 亚洲区第一页| 五月婷婷亚洲| 精品亚洲美女网站| 欧洲av一区二区| 神马午夜久久| 亚洲天堂免费电影| 老司机精品在线| 国产精品一级| 国产aa精品| 中国字幕a在线看韩国电影| 日韩精品视频网站| 精品免费av| 免费国产自久久久久三四区久久 | 国产综合欧美| 色天使综合视频| 亚洲一区二区三区在线免费| 欧美日韩精品一区二区三区视频| 91午夜精品| 日韩成人免费| 日韩视频二区| 中日韩男男gay无套| 国产日韩欧美一区在线| 精品国产午夜肉伦伦影院 | 日本蜜桃在线观看视频| 9国产精品视频| 欧美午夜网站| 欧美日韩免费观看视频| 91成人超碰| 老司机免费视频一区二区| 精品三级久久| 欧美中文一区二区| 国产精品二区影院| 激情欧美一区| 日韩亚洲精品在线观看| 9999国产精品| 另类国产ts人妖高潮视频| 麻豆高清免费国产一区| 免费av一区二区三区四区| 日韩国产精品久久久久久亚洲| 麻豆精品99| 亚洲一级二级| 亚洲最新无码中文字幕久久| 日韩毛片一区| 中文字幕在线看片| 国产人成精品一区二区三| 欧美国产极品| 国产精品美女久久久| 国产精品www.| 日韩成人午夜精品| 尤物精品在线| 麻豆精品视频在线观看免费| 蜜臀av性久久久久蜜臀aⅴ四虎| 日韩国产一区二区三区| 日本a级不卡| 免费观看不卡av| 91久久午夜| 久久久精品网| 狠狠久久伊人中文字幕| 国产色噜噜噜91在线精品| 亚洲+小说+欧美+激情+另类| 久久天堂精品| 欧美视频精品全部免费观看| 好看的av在线不卡观看| 久久久久免费av| 激情不卡一区二区三区视频在线| 亚洲久久视频| 国产一卡不卡| 麻豆精品久久| 美女久久精品| 国产精品大片|