第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Spring Boot 中的線程本地行為

Spring Boot 中的線程本地行為

蕭十郎 2023-07-28 16:43:47
我們知道 Tomcat 有大約 200 個(gè)線程,而 Jetty 在各自的線程池中有一些默認(rèn)計(jì)數(shù)的線程。因此,如果我們?cè)赥hreadLocal每個(gè)請(qǐng)求中設(shè)置一些內(nèi)容,它會(huì)在線程中終生存在,還是 TomcatThreadLocal在每個(gè)請(qǐng)求后清除它。如果我們?cè)谶^濾器中的 userContext 中設(shè)置某些內(nèi)容,是否需要在每次過濾器退出時(shí)清除它?或者如果我們沒有線程池配置,Web 服務(wù)器是否每次都會(huì)創(chuàng)建一個(gè)新線程?public static final ThreadLocal<UserContextDto> userContext = new ThreadLocal<>();
查看完整描述

3 回答

?
慕容708150

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超4個(gè)贊

是的,你需要清除ThreadLocal。Tomcat 不會(huì)清除 ThreadLocals。

不,并不是每次都會(huì)創(chuàng)建新線程。池中的線程用于服務(wù)請(qǐng)求,并在請(qǐng)求完成后返回池。

這不僅適用于 Tomcat,也適用于 Jetty 和 Undertow。為每個(gè)請(qǐng)求創(chuàng)建線程在資源和時(shí)間方面都是昂貴的。


查看完整回答
反對(duì) 回復(fù) 2023-07-28
?
HUX布斯

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超6個(gè)贊

不,Tomcat 不會(huì)清除您的代碼創(chuàng)建的 ThreadLocals,這意味著它們將保留并可能污染后續(xù)請(qǐng)求。

因此,每當(dāng)您創(chuàng)建一個(gè)請(qǐng)求時(shí),請(qǐng)確保在同一請(qǐng)求或任何其他請(qǐng)求存在之前將其清除。

還應(yīng)該注意的是,后續(xù)請(qǐng)求 - 即使使用相同的 URL - 也可能在完全不同的線程中執(zhí)行,因此 ThreadLocal 不是一種在請(qǐng)求之間保存狀態(tài)的機(jī)制。為此,可以使用 SessionBeans 之類的東西。



查看完整回答
反對(duì) 回復(fù) 2023-07-28
?
素胚勾勒不出你

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超9個(gè)贊

如果您在不是 100% 控制的線程中的 ThreadLocal 中放置了某些內(nèi)容(即從其他代碼調(diào)用您的線程,例如 HTTP 請(qǐng)求),則需要在離開代碼之前清除您設(shè)置的任何內(nèi)容。

try/finally結(jié)構(gòu)是一個(gè)很好的方法。

線程池?zé)o法為您做到這一點(diǎn),因?yàn)?Java API 不提供清除線程ThreadLocal變量的方法。(這可以說是Java API的一個(gè)缺點(diǎn))

不這樣做會(huì)有內(nèi)存泄漏的風(fēng)險(xiǎn),盡管它受到線程池大小的限制(如果有的話)。

一旦同一線程再次分配給了解 的代碼ThreadLocal,如果您沒有刪除它,您將看到上一個(gè)請(qǐng)求的舊值。依賴于此是不好的。它可能會(huì)導(dǎo)致難以追蹤的錯(cuò)誤、安全漏洞等。


查看完整回答
反對(duì) 回復(fù) 2023-07-28
  • 3 回答
  • 0 關(guān)注
  • 176 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)