可以看到ThreadLocal類中的變量只有這3個int型:
ThreadLocal實例的變量只有 threadLocalHashCode ThreadLocal類的靜態(tài)變量nextHashCode 和HASH_INCREMENT 實際上HASH_INCREMENT是一個常量,表示了連續(xù)分配的兩個ThreadLocal實例的 threadLocalHashCode值的增量,而nextHashCode 的表示了即將分配的下一個ThreadLocal實例的threadLocalHashCode 的值。 而nextHashCode()方法就是將ThreadLocal類的下一個hashCode值即nextHashCode的值賦給實例的threadLocalHashCode,然后nextHashCode的值增加HASH_INCREMENT這個值。
ThreadLocal有一個ThreadLocalMap靜態(tài)內(nèi)部類,你可以簡單理解為一個MAP,這個‘Map’為每個線程復制一個變量的‘拷貝’存儲其中。 看一下set()方法: 獲取當前線程的引用,從map中獲取該線程對應的map,如果map存在更新緩存值,否則創(chuàng)建并存儲
再來看一下get()方法: 首先獲取當前線程引用,以此為key去獲取響應的ThreadLocalMap,如果此‘Map’不存在則初始化一個,否則返回其中的變量。 調(diào)用get方法如果此Map不存在首先初始化,創(chuàng)建此map,將線程為key,初始化的vlaue存入其中,注意此處的initialValue,我們可以覆蓋此方法,在首次調(diào)用時初始化一個適當?shù)闹担J是null
我們來看下ThreadLocalMap靜態(tài)內(nèi)部類,在ThreadLocalMap 內(nèi)部的Entry 是WeakReference
posted on 2011-10-29 17:39 胡鵬 閱讀(1443) 評論(0) 編輯 收藏 所屬分類: java基礎 、J2EE