線程復用時Threadlocal的坑


Threadlocal為每個使用該變量的線程提供獨立的變量副本。

使用的情況:對每一個線程都必須持有一個類的實例,而且這個類是可變的(不可變的就是線程安全的,全部線程使用一個就可以了),例如hibernate對session的處理。

 

問題場景:用戶登錄時,token保存在ThreadLocal里,但是經常偶現 token失效(在tonken在有效時間里)

產生原因:使用線程池或有復用線程時,復用同一個線程時,每次請求結束后ThreadLoca的值l沒有清空,導致第二次使用時ThreadLocal的token還是上次遺留一下的token,以致tonken失效。

 

tomcat默認使用線程池,所以一個線程的生命周期不能對等於一個請求的生命周期,線程池中的線程是可以被復用的。

解決方案:

1、保證每次都用新的值覆蓋線程變量;

2、保證在每個請求結束后清空線程變量。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM