DRP-ThreadLocal簡單理解

      簡單來講是jar包封裝的一個類,在簡單一點是一個工具類!這個工具類能幹啥?這個工具類是用來編寫多線程的程序,好吧,多線程是啥,你們只能去網上找資料了,由於今天咱們只來介紹ThreadLocal的知識。api

     咱們來看看ThreadLocal封裝的接口方法吧:安全

     void set(Object value)設置當前線程的線程局部變量的值。
     public Object get()該方法返回當前線程所對應的線程局部變量。
     public void remove()將當前線程局部變量的值刪除,目的是爲了減小內存的佔用,該方法是JDK 5.0新增的方法。須要指出的是,當線程結束後,對應該線程的局部變量將自動被垃圾回收,因此顯式調用該方法清除線程的局部變量並非必須的操做,但它能夠加快內存回收的速度。
     方法是一個延遲調用方法,在線程第1次調用get()或set(Object)時才執行,而且僅執行1次。ThreadLocal中的缺省實現直接返回一個null。protected Object initialValue()返回該線程局部變量的初始值,該方法是一個protected的方法,顯然是爲了讓子類覆蓋而設計的。
多線程

   上面這些方法咱們能夠api文檔查詢到的,到了如今的ThreadLocal也變得更增強大了,加入了泛型的概念,void set(T value)、T get()以及T initialValue(),咱們能夠對多種數據類型進行操做了。併發

     在同步機制中,經過對象的鎖機制保證同一時間只有一個線程訪問變量。這時該變量是多個線程共享的,使用同步機制要求程序慎密地分析何時對變量進行讀寫,何時須要鎖定某個對象,何時釋放對象鎖等繁雜的問題,程序設計和編寫難度相對較大。
而ThreadLocal則從另外一個角度來解決多線程的併發訪問。在編寫多線程代碼時,能夠把不安全的變量封裝進ThreadLocal。
     因爲ThreadLocal中能夠持有任何類型的對象,低版本JDK所提供的get()返回的是Object對象,須要強制類型轉換。但JDK 5.0經過泛型很好的解決了這個問題,在必定程度地簡化ThreadLocal的使用,代碼清單 9 2就使用了JDK 5.0新的ThreadLocal<T>版本。
     歸納起來講,對於多線程資源共享的問題,同步機制採用了「以時間換空間」的方式,曾經寫過這麼一篇博文:《synchronized的應用》而ThreadLocal採用了「以空間換時間」的方式。前者僅提供一份變量,讓不一樣的線程排隊訪問,然後者爲每個線程都提供了一份變量,所以能夠同時訪問而互不影響。
工具

     關於ThreadLocal這一部分了解的仍是不太深,有什麼錯誤請讀者及時指正。spa

相關文章
相關標籤/搜索