文章目錄
- 兩種典型應用場景
- 場景1獨享物件
- 代碼迭代git
- ThreadLocal:解決加鎖性能問題
- 什么是ConcurrentHashMap?
- ThreadLocal
- ThreadLocal作用
- 主要方法
- 方法
- ThreadLocal原理及原始碼
- 注意問題
- 記憶體泄漏
- 解決:記憶體泄漏(阿里規約,呼叫的最后remove())
- 空指標例外
- 解決: 注意強參考 弱參考
兩種典型應用場景

場景1獨享物件

代碼迭代git
但通過加鎖解決共享物件
性能問題:還存在sycnized同一時間只能處理一個的,排隊問題

ThreadLocal:解決加鎖性能問題

改寫dataformat來源
代碼迭代2->5
生產出執行緒安全(時間不會重復)的日期(不用new 1000個物件,不用因為加鎖 排隊等待)

拓展
buider
什么是ConcurrentHashMap?
ConcurrentHashMap 是Java集合中map的實作,是HashMap的執行緒安全版本,性能也比較好,ConcurrentHashMap在資料結構上和HashMap的資料結構是一致的,區別在于ConcurrentHashMap是執行緒安全的,而HashMap不是執行緒安全的,在需要用到HashMap且是多執行緒的情況下,推薦使用ConcurrentHashMap,
## 場景2 解決:用戶資訊需要被執行緒內所有方法共享
ThreadLocal
定義全域存盤行不行?有性能損耗userMap
不用初始化,直接set/get
更好的解決辦法ThreadLocal

ThreadLocal作用

主要方法

方法
initValue 延遲加載


ThreadLocal原理及原始碼



remove 洗掉map中對應的一個 this

map 類似hashmap但是解決hash沖突的時候不同(線性探測發,找下一個空位置)

注意問題
記憶體泄漏



制為null,在threadlocal->resize

解決:記憶體泄漏(阿里規約,呼叫的最后remove())
針對執行緒進行回收

空指標例外
直接get,k默認為null,注意裝箱拆箱

解決: 注意強參考 弱參考
強參考
我們平日里面的用到的new了一個物件就是強參考,例如 Object obj = new Object();當JVM的記憶體空間不足時,寧愿拋出OutOfMemoryError使得程式例外終止也不愿意回收具有強參考的存活著的物件,
弱參考
弱參考是通過WeakReference類實作的,在GC的時候,不管記憶體空間足不足都會回收這個物件,適用于記憶體敏感的快取,ThreadLocal中的key就用到了弱參考,有利于記憶體回收,
CSDN認證博客專家
分布式
Java
架構
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/233605.html
標籤:其他
