JDK 21 - 为什么ThreadLocalRandom的nextInt直接用super.nextInt实现?

问题描述 投票:0回答:1
在 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
直接使用 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

java random thread-local
1个回答
0
投票
建议统一各种随机数生成器。它指出

RandomThreadLocalRandom

 中的算法足够相似,足以统一它们。
方法 
ThreadLocalRandom.nextInt(bound)

ThreadLocalRandom.nextInt(origin, bound)

 仍然存在,因为这些方法的 JavaDoc 与 
Random.nextInt(bound)
Random.nextInt(origin, bound)
 的 JavaDoc 不同。

© www.soinside.com 2019 - 2024. All rights reserved.