gpt4 book ai didi

java - 在什么情况下您希望为您的随机数生成器使用不同的种子?

转载 作者:搜寻专家 更新时间:2023-10-31 08:18:54 24 4
gpt4 key购买 nike

我想知道在什么情况下您希望为您的随机数生成器使用不同的种子。我在某处看到人们每次在需要时都会创建一个 Random 对象的代码,并且还看到人们有时会把它作为一个实例变量,在构造对象时使用单个种子。例如

// same seed
class A {
private Random random;
public A() { random = new Random(); }
public int nextInt() { return random.nextInt(10000); }
public double nextDouble() { return random.nextDouble(); }
}

对比

// different seed is used every time when you call the method
class B {
public int nextInt() { return new Random().nextInt(10000); }
public double nextDouble() { return new Random().nextDouble(); }
}

请忽略这两个包装器类的设计,只是想显示不同之处。

最佳答案

重用Random的两个原因:

  • 创建 Random 会产生开销。

  • 如果代码快速,创建两个不同的Random 对象可能最终会使用相同的种子值,即结果不会是随机的。即使代码没有那么快,不同的 Random 对象也将使用密切相关的种子值来播种,从而减少随机因素。

拥有多个 Random 实例的一个原因,虽然不是每次使用都创建一个新实例的原因。引用 javadoc :

Instances of java.util.Random are threadsafe. However, the concurrent use of the same java.util.Random instance across threads may encounter contention and consequent poor performance. Consider instead using ThreadLocalRandom in multithreaded designs.

即使在单线程应用程序中,使用 ThreadLocalRandom 也可能是合适的,作为获取共享 Random 实例的简单方法。

关于java - 在什么情况下您希望为您的随机数生成器使用不同的种子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40136646/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com