天天看點

ThreadLocal的了解(摘自牛客大佬的評論)(轉載CSDN大佬的部落格)

ThreadLocal類用來提供線程内部的局部變量。這種變量在多線程環境下通路(通過get或set方法通路)時能保證各個線程裡的變量相對獨立于其他線程内的變量。ThreadLocal執行個體通常來說都是private static類型的,用于關聯線程和線程的上下文。 可以總結為一句話:ThreadLocal的作用是提供線程内的局部變量,這種變量線上程的生命周期内起作用,減少同一個線程内多個函數或者元件之間一些公共變量的傳遞的複雜度。 舉個例子,我出門需要先坐公交再做地鐵,這裡的坐公交和坐地鐵就好比是同一個線程内的兩個函數,我就是一個線程,我要完成這兩個函數都需要同一個東西:公交卡(北京公交和地鐵都使用公交卡),那麼我為了不向這兩個函數都傳遞公交卡這個變量(相當于不是一直帶着公交卡上路),我可以這麼做:将公交卡事先交給一個機構,當我需要刷卡的時候再向這個機構要公交卡(當然每次拿的都是同一張公交卡)。這樣就能達到隻要是我(同一個線程)需要公交卡,何時何地都能向這個機構要的目的。 有人要說了:你可以将公交卡設定為全局變量啊,這樣不是也能何時何地都能取公交卡嗎?但是如果有很多個人(很多個線程)呢?大家可不能都使用同一張公交卡吧(我們假設公交卡是實名認證的),這樣不就亂套了嘛。現在明白了吧?這就是ThreadLocal設計的初衷:提供線程内部的局部變量,在本線程内随時随地可取,隔離其他線程。