介绍
这篇文章给大家介绍java.util.Random的原理是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
java.util.Random可以产生int,长,浮动,双以及Goussian等类型的随机数。这也是它与java.lang.Math中的方法随机()最大的不同之处,后者只产生双型的随机数。
该类的实例被用于生成伪随机数的流。该类使用一个48位的种子,它被一个线性同余公式所修改。如果随机的两个实例用同一种子创建,对每个实例完成同方法调用序列它们将生成和返回相同的数序列成同一方法调用序列,它们将生成和返回相同的数序列。
公共类RandomTest { 公共静态void main (String [] args) { testRandom (); System.out.println(“- - - - - - - - - - - - - - - - - - - - -产生绯闻;); testRandom (); System.out.println(“- - - - - - - - - - - - - - - - - - - - -产生绯闻;); testRandom (); } 公共静态孔隙testRandom () { 随机随机=new随机(1); for (int i=0;i<5;我+ +){ System.out.print (random.nextInt () +“\ t"); } System.out.println (“;”); } }
输出结果:
从结果中发现,只要种子一样,获取的随机数的序列就是一致的。是一种伪随机数的实现,而不是真正的随机数。
随机类结构
java类随机实现。可序列化的{ 私人最终AtomicLong种子; 私有静态最终长乘数=0 x5deece66dl; 私有静态最终长加数=0 xbl; 私有静态最终长掩码=(1 l & lt; & lt;48)- 1; 私有静态最终AtomicLong seedUniquifier=new AtomicLong (8682522807148012 l);
有参构造方法
公共随机(){ 这(seedUniquifier () ^ system . nanotime ()); } 私有静态长seedUniquifier () {//l # 39; Ecuyer,“表的线性同余发生器//不同大小和良好的晶格Structure" 1999年 (,){ 长电流=seedUniquifier.get (); 长下=当前* 181783497276652981 l; 如果(seedUniquifier.compareAndSet(电流、下)) 返回下一个; } }
通过源码发现,无参的构造方法,里面帮我们自动产生了一个种子,并通过中科院自旋方式保证,每次获取的种子不一样,从而保证每次<代码>新的随机()代码>获取的随机序列不一致。
java.util.Random的原理是什么