我想对我处理的每一个物体都有5个随机数。我处理许多对象(分别),并需要确保在所有数字中都实现了随机性。如果我处理5个对象,我将有25个随机数:
RN1 RN2 RN3 RN4 RN5
Object 1 1 2 3 4 5
Object 2 6 7 8 9 10
Object 3 11 12 13 14 15
Object 4 16 17 18 19 20
Object 5 21 22 23 24 25问题如下:
nextDouble从随机性质量方面获得一系列数字,会有什么区别吗?我的观点是,最好只创建一个随机数生成器(由所有对象共享),这样每当需要新的随机数时,我就可以调用nextDouble()并按随机数顺序获得下一个数字。
发布于 2014-12-02 15:12:46
查看一下来自Java的ThreadLocalRandom类。
它提供了统一的分布,避免了瓶颈,因为每个线程都有自己的副本。
对于他们有不同的序列,这一切都是关于改变他们的种子。在这种情况下,一个常见的做法是查看带有线程/任务/进程标识符的生成器。
发布于 2014-12-02 15:12:24
·对于单个对象,如果使用当前时间(以毫秒为种子)为每个单个数字创建随机数生成器,还是创建一个随机数生成器,并使用nextDouble从随机性质量方面获得一系列数字,会有什么区别吗?
不要用当前时间作为每个数字的种子。生成的时间少于当前时间的分辨率(毫秒)。
发布于 2014-12-03 15:17:09
最安全的方法可能是初步生成所需的随机数,将其保存到数组中,并建立访问顺序规则。这样,您就可以完全控制流程。也没有“失去随机性”。
否则,如果您一次启动多个生成器,它们很可能会带有相同的值(默认情况下是系统时间),如果您使用由不同线程同时访问的单个生成器,则需要传递一个Random类的对象,这个对象可能很好,但也可能导致可再现性的损失(我不确定这在您的情况下是否至关重要)。
https://stackoverflow.com/questions/27252557
复制相似问题