private transient int randomSeed;
randomSeed = seedGenerator.nextInt() | 0x0100;
private int randomLevel() {
int x = randomSeed;
x ^= x << 13;
x ^= x >>> 17;
randomSeed = x ^= x << 5;
if ((x & 0x80000001) != 0) // test highest and lowest bits
return 0;
int level = 1;
while (((x >>>= 1) & 1) != 0) ++level;
return level;
}
通过异或和位移 , 每次生成不同的32位, 周期为2的32次方减1
来自JDK ConcurrentSkipListMap