FastThreadLocalThread

FastThreadLocalThread 變量InternalThreadLocalMap

public class FastThreadLocalThread extends Thread {
    private InternalThreadLocalMap threadLocalMap;

InternalThreadLocalMap繼承UnpaddedInternalThreadLocalMap

/**
 * The internal data structure that stores the thread-local variables for Netty and all {@link FastThreadLocal}s.
 * Note that this class is for internal use only and is subject to change at any time.  Use {@link FastThreadLocal}
 * unless you know what you are doing.
 */
public final class InternalThreadLocalMap extends UnpaddedInternalThreadLocalMap {

    private static final InternalLogger logger = InternalLoggerFactory.getInstance(InternalThreadLocalMap.class);

    private static final int DEFAULT_ARRAY_LIST_INITIAL_CAPACITY = 8;
    private static final int STRING_BUILDER_INITIAL_SIZE;
    private static final int STRING_BUILDER_MAX_SIZE;

    public static final Object UNSET = new Object();

    static {
        STRING_BUILDER_INITIAL_SIZE =
                SystemPropertyUtil.getInt("io.netty.threadLocalMap.stringBuilder.initialSize", 1024);
        logger.debug("-Dio.netty.threadLocalMap.stringBuilder.initialSize: {}", STRING_BUILDER_INITIAL_SIZE);

        STRING_BUILDER_MAX_SIZE = SystemPropertyUtil.getInt("io.netty.threadLocalMap.stringBuilder.maxSize", 1024 * 4);
        logger.debug("-Dio.netty.threadLocalMap.stringBuilder.maxSize: {}", STRING_BUILDER_MAX_SIZE);
    }

選擇InternalThreadLocalMap.get()

    public static InternalThreadLocalMap get() {
        Thread thread = Thread.currentThread();
        if (thread instanceof FastThreadLocalThread) {
            return fastGet((FastThreadLocalThread) thread);
        } else {
            return slowGet();
        }
    }

fastGet()用自帶的InternalThreadLocalMap

   private static InternalThreadLocalMap fastGet(FastThreadLocalThread thread) {
        InternalThreadLocalMap threadLocalMap = thread.threadLocalMap();
        if (threadLocalMap == null) {
            thread.setThreadLocalMap(threadLocalMap = new InternalThreadLocalMap());
        }
        return threadLocalMap;
    }

slowGet()用父類的ThreadLocal變量

 private static InternalThreadLocalMap slowGet() {
        ThreadLocal<InternalThreadLocalMap> slowThreadLocalMap = UnpaddedInternalThreadLocalMap.slowThreadLocalMap;
        InternalThreadLocalMap ret = slowThreadLocalMap.get();
        if (ret == null) {
            ret = new InternalThreadLocalMap();
            slowThreadLocalMap.set(ret);
        }
        return ret;
    }

UnpaddedInternalThreadLocalMap

/**
 * The internal data structure that stores the thread-local variables for Netty and all {@link FastThreadLocal}s.
 * Note that this class is for internal use only and is subject to change at any time.  Use {@link FastThreadLocal}
 * unless you know what you are doing.
 */
class UnpaddedInternalThreadLocalMap {

    static final ThreadLocal<InternalThreadLocalMap> slowThreadLocalMap = new ThreadLocal<InternalThreadLocalMap>();
    static final AtomicInteger nextIndex = new AtomicInteger();

    /** Used by {@link FastThreadLocal} */
    Object[] indexedVariables;

    // Core thread-locals
    int futureListenerStackDepth;
    int localChannelReaderStackDepth;
    Map<Class<?>, Boolean> handlerSharableCache;
    IntegerHolder counterHashCode;
    ThreadLocalRandom random;
    Map<Class<?>, TypeParameterMatcher> typeParameterMatcherGetCache;
    Map<Class<?>, Map<String, TypeParameterMatcher>> typeParameterMatcherFindCache;

    // String-related thread-locals
    StringBuilder stringBuilder;
    Map<Charset, CharsetEncoder> charsetEncoderCache;
    Map<Charset, CharsetDecoder> charsetDecoderCache;

    // ArrayList-related thread-locals
    ArrayList<Object> arrayList;

    UnpaddedInternalThreadLocalMap(Object[] indexedVariables) {
        this.indexedVariables = indexedVariables;
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末酗捌,一起剝皮案震驚了整個(gè)濱河市育韩,隨后出現(xiàn)的幾起案子畦攘,更是在濱河造成了極大的恐慌集绰,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绿鸣,死亡現(xiàn)場(chǎng)離奇詭異疚沐,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)潮模,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)亮蛔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人擎厢,你說(shuō)我怎么就攤上這事究流。” “怎么了动遭?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵芬探,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我厘惦,道長(zhǎng)偷仿,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮炎疆,結(jié)果婚禮上卡骂,老公的妹妹穿的比我還像新娘。我一直安慰自己形入,他們只是感情好全跨,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著亿遂,像睡著了一般浓若。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蛇数,一...
    開(kāi)封第一講書(shū)人閱讀 51,462評(píng)論 1 302
  • 那天挪钓,我揣著相機(jī)與錄音,去河邊找鬼耳舅。 笑死碌上,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的浦徊。 我是一名探鬼主播馏予,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼盔性!你這毒婦竟也來(lái)了霞丧?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤冕香,失蹤者是張志新(化名)和其女友劉穎蛹尝,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體悉尾,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡突那,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了构眯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片陨收。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖鸵赖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拄衰,我是刑警寧澤它褪,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站翘悉,受9級(jí)特大地震影響茫打,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一老赤、第九天 我趴在偏房一處隱蔽的房頂上張望轮洋。 院中可真熱鬧,春花似錦抬旺、人聲如沸弊予。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)汉柒。三九已至,卻和暖如春责鳍,著一層夾襖步出監(jiān)牢的瞬間碾褂,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工历葛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留正塌,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓恤溶,卻偏偏與公主長(zhǎng)得像乓诽,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子宏娄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • (一)Java部分 1问裕、列舉出JAVA中6個(gè)比較常用的包【天威誠(chéng)信面試題】 【參考答案】 java.lang;ja...
    獨(dú)云閱讀 7,104評(píng)論 0 62
  • 曾經(jīng)的那個(gè)你 喜歡上課偷偷寫(xiě)情書(shū) 字體連自己都不忍直視 還是下課鼓起勇氣 送給那個(gè)白衣女孩 想說(shuō)那句話 確怎么也說(shuō)...
    我是小梁啊閱讀 230評(píng)論 0 1
  • 1月7日,廚房工作間午休孵坚,一如往常熄燈后的黑暗粮宛,角落,取高凳端坐冥想卖宠,安寧巍杈。 23分后轉(zhuǎn)醒,起身做懶腰狀順手拿下桌...
    昉之閱讀 251評(píng)論 2 1
  • 步入職場(chǎng)越久的人,越發(fā)現(xiàn)一個(gè)現(xiàn)象: 那些晉升很快的人刺洒,那些牛人鳖宾,都一直在學(xué)習(xí),從來(lái)沒(méi)有停止過(guò)逆航。 相信大家當(dāng)初剛進(jìn)入...
    十點(diǎn)半不看書(shū)閱讀 1,169評(píng)論 1 5
  • 清晨鼎文,同學(xué)們剛進(jìn)入校門(mén),就迫不及待的因俐。的來(lái)到閱覽室拇惋,開(kāi)始暢游書(shū)海周偎。
    秋日私語(yǔ)8122閱讀 132評(píng)論 0 1