@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
直接使用 super 的(Random 的)方法来实现。这样,我猜 ThreadLocalRandom 就该方法而言不再是“ThreadLocal”了。
我还检查了具有相同签名的方法,例如JDK8中ThreadLocalRandom的
int nextInt(int bound)
:
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
。
Random
和 ThreadLocalRandom
中的算法足够相似,足以统一它们。
方法
ThreadLocalRandom.nextInt(bound)
和 ThreadLocalRandom.nextInt(origin, bound)
仍然存在,因为这些方法的 JavaDoc 与
Random.nextInt(bound)
和
Random.nextInt(origin, bound)
的 JavaDoc 不同。