這裡使用類的乙個靜態變數,每次新建乙個在hash_increment的基礎上進行累加,從這裡保證hashcode值的唯一性,遞增的計算,保證槽位不會被占用
private
final
int threadlocalhashcode =
nexthashcode()
;private
static
intnexthashcode()
private
static
final
int hash_increment =
0x61c88647
;private
static atomicinteger nexthashcode =
newatomicinteger()
;
/**
* key, 當前threadlocal物件
* value, 使用者設定的值
*/private
void
set(threadlocal<
?> key, object value)
// key為空的處理,
if(k == null)
}// 新建乙個鍵值對, 並且加入到table中
tab[i]
=new
entry
(key, value)
;int sz =
++size;
// 檢查是否需要對table進行擴容, 初始預設大小為16if(
!cleansomeslots
(i, sz)
&& sz >= threshold)
rehash()
;}
public t get()
}return
setinitialvalue()
;}
private t setinitialvalue()
elseif(
this
instanceof
terminatingthreadlocal
)// 最後直接返回這個null值
return value;
}
public
void
remove()
}private
void
remove
(threadlocal<
?> key)}}
private
intexpungestaleentry
(int staleslot)
else}}
return i;
}
ThreadLocal實現原理與原始碼分析
threadlocal底層實現內部類 threadlocalmap 一 threadlocal的set方法原始碼分析 1 public void set t value thread t thread.currentthread threadlocalmap map getmap t if map ...
ThreadLocal原始碼理解
threadlocal其實原理是建立了多份相同資料儲存在堆記憶體上,每個執行緒的thread類裡有threadlocal.threadlocalmap threadlocals的屬性來指向存位置,所以每個執行緒修改都不會影響到其他執行緒的資料 首先說下下面用到的東西 threadlocalmap為t...
ThreadLocal原始碼分析
在理解handler looper之前,先來說說threadlocal這個類,聽名字好像是乙個本地執行緒的意思,實際上它並不是乙個thread,而是提供乙個與執行緒有關的區域性變數功能,每個執行緒之間的資料互不影響。我們知道使用handler的時候,每個執行緒都需要有乙個looper物件,那麼and...