ThreadLocal原始碼分析

2021-10-08 22:41:02 字數 1708 閱讀 8947

這裡使用類的乙個靜態變數,每次新建乙個在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...