FastThreadLocal

JDK提供了ThreadLocal,用於構造線程安全的對象,ThreadLocal通過Thread的ThreadLocalMap內部屬性來保證線程安全,而ThreadLocalMap的key是ThreadLocal。通過map這種數據結構來存儲線程相關的數據。而Netty裏的FastThreadLocal是如何做到比ThreadLocal有更快的速度的呢。下面來分析Netty裏FastThreadLocal的實現:

  • FastThreadLocal的構造方法如下:

set方法

  • set方法的入口
  • InternalThreadLocalMap會根據線程的實現不同,獲取的方式不一樣:
  • InternalThreadLocalMap是一個什麼樣的對象,能夠比map還快速的獲取到對應的數據:
  • 設置數據的邏輯

    總結:從上面的代碼可以看出爲什麼FastThreadLocal比JDK的ThreadLocal快了:FastThreadLocal通過一個index屬性(相當於FastThreadLocal的ID),直接從InternalThreadLocalMap的數組中定位到線程對應的值,而ThreadLocal設置值(或取值)需要從一個Map結構裏取。Map結構也很高效,但有可能有數據衝突,並且需要計算hash值,然後定位到對象存在那裏。相比數組的取值還是會低一些。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章