ThreadLocalRandom
在JDK 17和更高版本中(最高为JDK 21):
@Override
public int nextInt(int bound) {
return super.nextInt(bound);
}
@Override
public int nextInt(int origin, int bound) {
return super.nextInt(origin, bound);
}
ThreadLocalRandom中的方法nextXXX
直接使用超级(随机)方法实现.通过这种方式,我猜想对于这些方法,ThreadLocalRandom不再是"ThreadLocal".
我还判断了JDK8中ThreadLocalRandom的相同方法,如:
public int nextInt(int bound) {
if (bound <= 0)
throw new IllegalArgumentException(BadBound);
int r = mix32(nextSeed());
int m = bound - 1;
if ((bound & m) == 0) // power of two
r &= m;
else { // reject over-represented candidates
for (int u = r >>> 1;
u + m - (r = u % bound) < 0;
u = mix32(nextSeed()) >>> 1)
;
}
return r;
}
我的问题是,那些nextXXX
直接在JDK17中使用super.nextXXX()
实现的意义是什么(甚至第一个版本都来自较早的JDK版本,我没有证明这是合理的),这使得ThreadLocalRandom
只是一个纯粹的Random
.