ThreadLocal(隨便記些……)

來源:互聯網
上載者:User

ThreadLocal 不是用來解決共用對象的多線程訪問 問題的。一般情況下,通過ThreadLocal.set() 到線程中的對象是該線程自己使用的對象,其他線程是不需要訪問的,也訪問不到的。

線程各自獨立的一個對象???擷取的方式是,通過每個線程中的new對象的操作來建立的對象,每個線程建立一個,不是什麼對象的拷貝或副本。

ThreadLocal.ThreadLocalMap:一個客戶化的hash map僅僅適合於維護執行緒區域值。只能在ThreadLocal中使用,對外並不提供操作。ThreadLocalMap是屬於包層級的;ThreadLocalMap中的key使用了WeakReferences。(hash table entries),當引用隊列沒有被用到時,舊的實體就會被GC回收(排除其他對其的引用)

可到達性:

從最強到最弱,不同的可到性層級反映了對象的生命週期。在操作上,可將它們定義如下:

  • 如果某一線程可以不必遍曆所有引用對象而直接到達一個對象,則該對象是強可到達 對象。新建立的對象對於建立它的線程而言是強可到達對象。
  • 如果一個對象不是強可到達對象,但通過遍曆某一軟引用可以到達它,則該對象是軟可到達 對象。
  • 如果一個對象既不是強可到達對象,也不是軟可到達對象,但通過遍曆弱引用可以到達它,則該對象是弱可到達 對象。當清除對某一弱可到達對象的弱引用時,便可以終止此對象了。
  • 如果一個對象既不是強可到達對象,也不是軟可到達對象或弱可到達對象,它已經終止,並且某個虛引用在引用它,則該對象是虛可到達 對象。
  • 最後,當不能以上述任何方法到達某一對象時,該對象是不可到達 對象,因此可以回收此對象。

ThreadLocal的應用場合,覺得適合的是按線程多執行個體(每個線程對應一個執行個體)的對象的訪問,並且這個對象很多地方都要用到。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.