ThreadLocal的哈希算法如何体现,使其在处理哈希冲突时偏爱线性探测?
- 内容介绍
- 相关推荐
本文共计841个文字,预计阅读时间需要4分钟。
每个ThreadLocal实例在构建时就会确定一个唯一的哈希码:
这种设计直接服务于后续哈希表行为:既然 key 本身已足够“均匀”,就不需要复杂哈希函数或链地址法来兜底。
为什么 ThreadLocalMap 不用链表或红黑树处理冲突
ThreadLocalMap 的 key 是 ThreadLocal 实例,而单个线程里通常只持有几十个 ThreadLocal 变量。在哈希值高度离散的前提下,数组长度默认是 16(INITIAL_CAPACITY),实际探测路径极短——多数 set() 或 get() 一两次就能命中。
本文共计841个文字,预计阅读时间需要4分钟。
每个ThreadLocal实例在构建时就会确定一个唯一的哈希码:
这种设计直接服务于后续哈希表行为:既然 key 本身已足够“均匀”,就不需要复杂哈希函数或链地址法来兜底。
为什么 ThreadLocalMap 不用链表或红黑树处理冲突
ThreadLocalMap 的 key 是 ThreadLocal 实例,而单个线程里通常只持有几十个 ThreadLocal 变量。在哈希值高度离散的前提下,数组长度默认是 16(INITIAL_CAPACITY),实际探测路径极短——多数 set() 或 get() 一两次就能命中。

