创建ThreadLocal实例时这个值都会累加 0x61c88647, 目的在上面的注释中已经写的很清楚了:为了让哈希码能均匀的分布在2的N次方的数组里.ThreadLocalMap 中 Entry[] table 的大小必须是2的N次方(len = 2^N),那 len-1 的二进制表示就是低位连续的N个1也就是 threadLocalHashCode 的低N位 这样就能均匀的产生均匀的分布。
package com;
public class ThreadLocalHashDemo {
private static final int HASH_INCREMENT = 0x61c88647;
public static void main(String[] args) {
magicHash(16);
magicHash(32);
}
private static void magicHash(int capacity) {
for (int i = 0;i < capacity;i++){
int hashcode = i * HASH_INCREMENT + HASH_INCREMENT;
System.out.print((hashcode & (capacity - 1))+" ");
}
System.out.println("");
}
}
生成不重复的数
