ThreadLocal的非資料安全用法

2021-08-22 03:21:43 字數 292 閱讀 7964

啟發於同學處理的bug,他遇到的問題是:

「有三颱tomcat伺服器,其中有一台tomcat伺服器出現這種情況:乙個使用者a登入了系統,如果有新的使用者b接著登入系統,會把使用者a的登入資訊給替換成新使用者b的資訊。這造成無緣無故看到是別人的暱稱和頭像。」

原因:這個老舊系統裡面使用了threadlocal儲存使用者登入的資訊,threadlocal是執行緒安全的,可threadlocal不是會話安全的。在tomcat裡面會建立擁有許多執行緒的執行緒池,而每條執行緒被使用後又被tomcat的執行緒池收回再利用(只有超過最小空閒才會被**),執行緒沒有被銷毀。

threadLocal的資料模型

之前一直對threadlocal一知半解 1.通過thread 就能找到自己儲存對value 2.看原始碼分析,他存放對是 this 也就是當前對物件的位址hashcode啊,這個又是怎麼回事?自己看原始碼理解到的threadlocal的資料模型 這個你細細品 thread 是當前執行緒執行緒號 t...

關於threadlocal的來龍去脈

對tls更簡單的,但是更直觀的理解可以如下 基於c語言 1.全域性物件,全域性變數的作用域和生命週期是全域性的,這裡的全域性是指程序範疇,也就是說,如果你將其設計為全域性物件,全域性變數,就意味著你希望在多執行緒的環境中,仍然能共享和訪問。全域性物件,全域性變數不是說不讓多執行緒來訪問,而是說有的時...

ThreadLocal的個人理解

threadlocal的設計思想十分簡單,它的核心物件就是threadlocalmap,被宣告在thread類裡面,每個thread都持有乙個threadlocalmap,所以才能實現執行緒隔離,以達到儲存共享變數的作用 threadlocal.threadlocalmap threadlocals...