中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

ThreadLocal的幾種誤區分別是什么

發布時間:2021-12-17 15:29:58 來源:億速云 閱讀:126 作者:柒染 欄目:編程語言

這期內容當中小編將會給大家帶來有關ThreadLocal的幾種誤區分別是什么,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal為解決多線程程序的并發問題提供了一種新的思路。使用這個工具類可以很簡潔地編寫出優美的多線程程序,ThreadLocal并不是一個Thread,而是Thread的局部變量。

最近由于需要用到ThreadLocal,在網上搜索了一些相關資料,發現對ThreadLocal經常會有下面幾種誤解。

一、ThreadLocal是java線程的一個實現

ThreadLocal的確是和java線程有關,不過它并不是java線程的一個實現,它只是用來維護本地變量。針對每個線程,提供自己的變量版本,主要是為了避免線程沖突,每個線程維護自己的版本。彼此獨立,修改不會影響到對方。

二、ThreadLocal是相對于每個session的

ThreadLocal顧名思義,是針對線程。在java web編程上,每個用戶從開始到會話結束,都有自己的一個session標識。但是ThreadLocal并不是在會話層上。其實,Threadlocal是獨立于用戶session的。它是一種服務器端行為,當服務器每生成一個新的線程時,就會維護自己的ThreadLocal。

對于這個誤解,個人認為應該是開發人員在本地基于一些應用服務器測試的結果。眾所周知,一般的應用服務器都會維護一套線程池,也就是說,對于每次訪問,并不一定就新生成一個線程。而是自己有一個線程緩存池。對于訪問,先從緩存池里面找到已有的線程,如果已經用光,才去新生成新的線程。

所以,由于開發人員自己在測試時,一般只有他自己在測,這樣服務器的負擔很小,這樣導致每次訪問可能是共用同樣一個線程,導致會有這樣的誤解:每個session有一個ThreadLocal

三、ThreadLocal是相對于每個線程的,用戶每次訪問會有新的ThreadLocal

理論上來說,ThreadLocal是的確是相對于每個線程,每個線程會有自己的ThreadLocal。但是上面已經講到,一般的應用服務器都會維護一套線程池。因此,不同用戶訪問,可能會接受到同樣的線程。因此,在做基于TheadLocal時,需要謹慎,避免出現ThreadLocal變量的緩存,導致其他線程訪問到本線程變量

四、對每個用戶訪問,ThreadLocal可以多用

可以說,ThreadLocal是一把雙刃劍,用得來的話可以起到非常好的效果。但是,ThreadLocal如果用得不好,就會跟全局變量一樣。代碼不能重用,不能獨立測試。因為,一些本來可以重用的類,現在依賴于ThreadLocal變量。如果在其他沒有ThreadLocal場合,這些類就變得不可用了。個人覺得ThreadLocal用得很好的幾個應用場合,值得參考

1、存放當前session用戶:quake want的jert

2、存放一些context變量,比如webwork的ActionContext

3、存放session,比如Spring hibernate orm的session

上述就是小編為大家分享的ThreadLocal的幾種誤區分別是什么了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

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

AI

钦州市| 资溪县| 克山县| 遂宁市| 香格里拉县| 虎林市| 宁晋县| 临泽县| 毕节市| 高碑店市| 上蔡县| 获嘉县| 裕民县| 商水县| 万山特区| 高邮市| 临澧县| 西充县| 任丘市| 西乌珠穆沁旗| 连山| 仙游县| 陆川县| 新和县| 曲周县| 禹城市| 扶绥县| 罗江县| 龙海市| 石嘴山市| 买车| 曲靖市| 海阳市| 容城县| 重庆市| 通城县| 海门市| 麻栗坡县| 涟源市| 洪泽县| 镇康县|