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系列之---【微服务间的认证—Feign拦截器】
    我爱java系列之---【设置权限的三种解决方案】
    581. Shortest Unsorted Continuous Subarray
    129. Sum Root to Leaf Numbers
    513. Find Bottom Left Tree Value
    515. Find Largest Value in Each Tree Row
    155. Min Stack max stack Maxpop O(1) 操作
    painting house
    Minimum Adjustment Cost
    k Sum
  • 原文地址:https://www.cnblogs.com/bytecodebuffer/p/13671558.html
Copyright © 2011-2022 走看看