我想为我处理的每个对象提供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()
并按随机数序列获得下一个数字。
答案 0 :(得分:3)
查看Java中的ThreadLocalRandom
类。
它提供了统一的分发并避免了瓶颈,因为每个线程都有自己的副本。
关于他们有不同的序列,它都是关于改变他们的种子。在这种情况下,一种常见的做法是使用Thread / Task / Process的标识符查看生成器。
答案 1 :(得分:1)
•对于单个对象,如果我随机创建它会有所不同 使用当前时间输入每个数字的数字生成器 毫秒作为种子或当我创建一个随机数生成器和 在随机性质量方面使用nextDouble得到一系列数字?
不要将当前时间用作每个数字的种子。生成所花费的时间少于当前时间的分辨率(以毫秒为单位)。
答案 2 :(得分:1)
最安全的方法可能是初步生成所需数量的随机数,将其保存到数组中,并建立访问顺序规则。通过这种方式,您可以完全控制该过程。也没有“失去随机性”。
否则,如果一次启动多个生成器,它们很可能会以相同的值(默认为系统时间)播种,如果您使用由不同线程同时访问的单个生成器,则需要传递{的对象{1}}类,这可能是好的,但也可能导致重复性的损失(我不确定,如果这对你的情况至关重要)。