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();
  • 相关阅读:
    java 继承(下)
    java继承
    java代码封装与编译
    使用Access-Control-Allow-Origin解决跨域
    java (基本语法)
    ZendStudio如何汉化
    如何让数据库在每天的某一个时刻自动执行某一个存储过程或者某一个sql语句
    百度地图不用密匙也可以使用
    .net在当前日期的基础上加一天
    当你的IIS需要运行ASP网站时,需要这样配置下你的IIS
  • 原文地址:https://www.cnblogs.com/bytecodebuffer/p/13671558.html
Copyright © 2011-2022 走看看