java中随机数生成器的解释

Wil*_*ill 3 java random

阅读关于费舍尔 - 耶茨洗牌最后一段的维基百科页面是:

最后,需要注意的是,即使生成完美的随机数,也可能通过不正确地使用发生器将缺陷引入实现中.例如,假设Java实现为每次调用shuffler创建一个新生成器,而不传递构造函数参数.然后,生成器将被语言的时间默认播种(在Java的情况下为System.currentTimeMillis()).因此,如果两个调用者在小于时钟粒度的时间跨度内调用shuffler(在Java的情况下为1毫秒),则他们创建的生成器将是相同的,并且(对于相同长度的数组)相同的排列将是生成.如果快速连续多次调用洗牌器,几乎肯定会发生这种情况,在这种情况下会导致极不均匀的分布; 它也可以应用于来自不同线程的独立调用.更强大的Java实现将使用在shuffler函数之外定义的生成器的单个静态实例.

我理解除了本段最后一句之外的所有内容.当作者说:

更强大的Java实现将使用在shuffler函数之外定义的生成器的单个静态实例.

mat*_*hon 11

这意味着你有一个像这样的静态函数:

class RandomUtil {

    public static final Random rand = new Random();     

}
Run Code Online (Sandbox Code Playgroud)

然后,您使用此rand生成器RandomUtil.rand.nextInt()生成所有随机数.您只使用这一个实例,并确保不会出现wiki中提到的问题.