zoukankan      html  css  js  c++  java
  • Java 生成随机数 Random、SecurityRandom、ThreadLocalRandom、Math.random()

    https://blog.csdn.net/hustspy1990/article/details/93364805

    https://blog.csdn.net/qq_33101675/article/details/81028210?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param

    1.Random (Instances of java.util.Random are threadsafe)

    Random 生成随机数,有一个构造函数,传递的 long 类型的值,当使用空构造的时候,实际上传递的是 System.nanoTime() ,即当前时间的毫秒数的值。参数也叫种子。一般情况下使用空参构造即可,如果指定

    种子的数值,则生成的随机数都是一样的。所以种子不能写死

    Java.util.Random 类中实现的随机算法是伪随机,也就是有规则的随机,就是在给定 seed 的区间内随机生成的数字

    相同种子数的Random 对象,产生的随机数是完全一样的

    Random 是线程安全的,内部的Seed 是全局变量,多线程生成随机数时,使用了 cas 

    2.ThreadLocalRandom

    ThreadLocalRandom 是 Java7 新增的,给多线程并发使用的 , 速度比Random 要快。 ThreadLocalRandom 是通过 ThreadLocal 改进的用于随机生成的工具类,每个线程单独持有一个,不存在竞争问题

    ThreadLocalRandom threadLocalRandom = ThreadLocalRandom.current();
    for(int i=0;i<10;i++){
    System.out.println(threadLocalRandom.nextInt(10));
    }
    构造方法是 private ,只能是单例模式,不能够设置 seed

    3.SecurityRandom

    SeurityRandom 内置两种随机数算法,NativePrRNG 和 SHA1PRNG 。通过 new 来创建,默认使用 NavivePRNG 算法生成随机数,也可以通过参数修改

    也可以通过 getInstance 来初始化对象,有一个参数传递算法名就可以,第二个参数指定算法程序包 。SHA1PRNG 的性能比 NATIVEPRNG 性能好一倍

    可以使用 new创建 ,也可以是静态方法getInstance() 获取,可以设置 seed ,如果seed 固定,那么随机的结果也将不变

    4. Math.random()

    比较常用的生成随机数的方法,默认 0.0-1.0 之间的小数【左闭右开】

    总结:使用随机数,对安全要求不高的情况,Rando, 要求较高使用 SecurityRandom

    Random 是线程安全的,用CAS 保持,性能不高,多线程尽量使用 ThreadLocalRandom

    5.JvmRandom Jvm 对Random 的一种实现

    在 commons-lang 包下

    JVMRandom jvmRandom = new JVMRandom();
  • 相关阅读:
    童年
    转:如何破解超星打印页数限制
    2016.7.14.2014noip模拟赛D1(网上貌似搜不到
    商店购物
    几道有趣的题
    2016.7.11.第27套测试题(noip2013提D1)
    2016.7.12.第28套测试题(2013noip题D2)
    跨域访问http接口的使用
    心得之——程序的修改和拓展
    不使用<script>导入js文件
  • 原文地址:https://www.cnblogs.com/bytecodebuffer/p/13671558.html
Copyright © 2011-2022 走看看