我希望为我处理的每个对象提供 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
获取一系列数字,这会产生影响吗? > 在随机性质量方面? - 一旦我处理多个对象并获取所有对象的所有第一个随机数,这些会形成均匀随机分布(例如数字 1、6、11、16、21)还是会以某种方式被破坏?
我的观点是,最好只创建一个随机数生成器(由所有对象共享),这样每当需要新的随机数时,我就可以调用 nextDouble()
并获取下一个数字随机数序列。
最佳答案
看看 ThreadLocalRandom
来自 Java 的类。
它提供均匀分布并避免瓶颈,因为每个线程都有自己的副本。
关于它们具有不同的序列,这都是关于改变它们的种子。在这种情况下,一种常见的做法是查看带有线程/任务/进程标识符的生成器。
关于java - 正确生成随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27252557/