多线程并发神器--ThreadLocal
什么是ThreadLocal
可以理解成線程本地變量,傳統的線程對一個變量操作時操作的是同一個對象,也存在線程安全的問題。
ThreadLocal是一個變量的本地副本,線程對變量的操作不會影響其他線程。
首先看看ThreadLocal的類結構
其中可重寫的方法有以下幾個
initialValue():ThreadLocal初始化的值,新建ThreadLocal的一般要重寫給個初始的值。
get():獲取當前線程變量的副本值。
set(T value):設置、更新當前線程上的變量副本值。
remove():移除當前線程上的變量副本。
ThreadLocal使用
新建ThreadLocal,類型為User,并初始化為tom,12歲,啟動3個線程,每個線程循環3次,休眠1少,主線程再輸出。
輸出結果如下
從結果可見每個線程使用的是各自線程的變量副本,并沒有影響其他線程和主線程,實現了線程隔離的效果。
使用場景
一般用來解決數據庫連接、用戶session管理等。
內存泄露問題
如果線程的執行周期過長可能導致內存泄露的風險,雖然線程執行完后會ThreadLocal也會隨著銷毀,但最好使用完后加上remove這樣會加快內存的釋放,一般來說線程周期不長是不太會引起內存泄露的。還有如果定義了ThreadLocal又不用也有問題,因為每次ThreadLocal的get/set/remove操作都會清理無效的key加快內存釋放。ThreadLocal應用比較廣泛,如果不是濫用,利是大于憋的。
總結
以上是生活随笔為你收集整理的多线程并发神器--ThreadLocal的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 创识科技是做什么的
- 下一篇: [翻译]NUnit---String