目录

Random 性能问题

ThreadLocalRandom

SecureRandom


Random 性能问题

1、使用 Random 类时,为了避免重复创建的开销,通常将实例化好的 Random 对象设置为服务对象的属性或静态属性,这在线程竞争不激烈的情况下没有问题,但高并发时,使用同一个 Random 对象可能会导致线程阻塞。

2、Random 的随机原理是对一个'随机种子'进行固定的算术和位运算,得到随机结果,再使用这个结果作为下一次随机的种子。在解决线程安全问题时,Random 使用 CAS 更新下一次随机的种子,可以想到,如果多个线程同时使用这个对象,就肯定会有一些线程执行 CAS 连续失败,进而导致线程阻塞。

ThreadLocalRandom

1、Java jdk 1.7 开始在 concurrent 包内添加了 ThreadLocalRandom 类,与当前线程隔离的随机数生成器。

2、ThreadLocalRandom 通常应该是这样的形式: ThreadLocalRandom.current().nextX(...) (其中X是Int , Long ,等),当所有用法都是这种形式时,绝对不可能跨多个线程共享一个ThreadLocalRandom。

3、ThreadLocalRandom 还提供了其他常用的有界随机生成方法,ThreadLocalRandom 不是加密安全的,在安全敏感的应用程序中考虑使用 SecureRandom。

SecureRandom

1、SecureRandom 提供了一个密码强的随机数生成器,调用者通过无参数构造函数或 getInstance 方法之一获取一个 SecureRandom 实例。

    /*** 实际项目中不推荐使用 Random、建议使用 ThreadLocalRandom、SecureRandom* int nextInt():返回此随机数生成器序列中的下一个伪随机,包括负数,如 -8022357372481675815* long nextLong():返回此随机数生成器序列中的下一个伪随机,包括负数,如 -686133030* int nextInt(int bound):返回 [0,bound) 之间的随机数* boolean nextBoolean():随机返回 true 或者 false.* double nextDouble(): 返回 (0,1) 之间的随机浮点型,如 0.22474496933706056* float nextFloat():返回 (0,1) 之间的随机浮点型,如 0.9701549*/@Testpublic void testRandom() {System.out.println(new Random().nextInt());System.out.println(new Random().nextInt(1000));System.out.println(new Random().nextBoolean());System.out.println(new Random().nextDouble());System.out.println(new Random().nextFloat());System.out.println(new Random().nextLong());}/*** Java jdk 1.7 开始在 concurrent 包内添加了 ThreadLocalRandom 类,与当前线程隔离的随机数生成器。* ThreadLocalRandom 不是加密安全的,在安全敏感的应用程序中考虑使用 SecureRandom。*/@Testpublic void testSecureRandom2() {System.out.println(ThreadLocalRandom.current().nextInt());System.out.println(ThreadLocalRandom.current().nextInt(1000));System.out.println(ThreadLocalRandom.current().nextBoolean());System.out.println(ThreadLocalRandom.current().nextDouble());System.out.println(ThreadLocalRandom.current().nextFloat());System.out.println(ThreadLocalRandom.current().nextLong());}/*** SecureRandom 提供了一个密码强的随机数生成器,调用者通过无参数构造函数或 getInstance 方法之一获取一个 SecureRandom 实例。*/@Testpublic void testSecureRandom() {System.out.println(new SecureRandom().nextInt());System.out.println(new SecureRandom().nextInt(1000));System.out.println(new SecureRandom().nextBoolean());System.out.println(new SecureRandom().nextDouble());System.out.println(new SecureRandom().nextFloat());System.out.println(new SecureRandom().nextLong());}

src/main/java/org/example/uitls/RandomTest.java · 汪少棠/java-se - Gitee.com

Java SE 随机数生成器 Random相关推荐

  1. Java 随机数生成器 Random SecureRandom 原理分析

    文章目录 java.util.Random java.Security.SecureRandom /dev/random 与 /dev/urandom 资料 Java 里提供了一些用于生成随机数的工具 ...

  2. Java 随机数生成器 Random SecureRandom

    Java 里提供了一些用于生成随机数的工具类,这里分析一下其实现原理,以及他们之间的区别.使用场景. java.util.Random Random 是比较常用的随机数生成类,它的基本信息在类的注释里 ...

  3. Java生成随机数(random()和Random类)

    在 Java 中要生成一个指定范围之内的随机数字有两种方法:一种是调用 Math 类的 random() 方法,一种是使用 Random 类. Random 类提供了丰富的随机数生成方法,可以产生 b ...

  4. Java获取随机数(Random随机数)

    代码 package blackhorse; import java.util.Random;//import生成随机数的包 public class RandomNumber {public sta ...

  5. java 产生随机数(Random用法)

    import java.util.*; public class Yancey77{public static void main(String[]args){//产生随机数Random ran=ne ...

  6. Java 中Random类随机数生成器

    *随机数生成器Random类  *   * public Random()产生一个随机数生成器  * public Random(long seed):创建随机数生成器的同时,给固定时间值  *    ...

  7. java随机数生成_java实现随机数生成器

    本文实例为大家分享了java实现随机数生成器的具体代码,供大家参考,具体内容如下 自己编的随机数生成器,比较简陋,功能也单一,当作练手. Application.java package src; p ...

  8. 随机数生成器 java_Java中的随机数生成器

    随机数生成器 java Today we will look at how to generate a random number in Java. Sometimes we need to gene ...

  9. java90到100随机数生成器_java实现随机数生成器

    本文实例为大家分享了java实现随机数生成器的具体代码,供大家参考,具体内容如下 自己编的随机数生成器,比较简陋,功能也单一,当作练手. application.java package src; p ...

  10. java产生随机数实例

    java产生随机数实例 random 产生随机 Random类用来生成随机数字,使用起来也是三步 导包 import java.uitl.Random; 创建 Random r = new Rando ...

最新文章

  1. Python安装某个库,出现Read_Time_out错误,那么如何配置 “国内镜像源”呢?
  2. 修改大表字段属性报主键冲突
  3. [one day one question] webpack打包压缩 ES6 js、.vue报错
  4. 【BZOJ4289】Tax,堆优化dijsktra的最短路问题
  5. 思科c240 m3 服务器安装系统,2U机架式 思科UCS C240 M3让你心动
  6. 开课吧:深入了解人工智能在金融行业中的应用
  7. 遇到Python中文目录名问题,未解决
  8. App测试工具大全,收藏这篇就够了
  9. 山地车中轴进水表现_山地车中轴异响分析及解决方法
  10. TRC格列卫(甲磺酸伊马替尼)病毒-宿主融合抑制剂方案
  11. Vmware安装Ubuntu20.04
  12. chatter个人理解
  13. 你唯一需要擅长的事情
  14. MQTT学习笔记(4)报文分析之PUBLISH
  15. 小米usb当前设备已被临时限制3-2
  16. Java jmap与jcmd命令dump内存heap堆
  17. matlab地球月球卫星关系,Matlab 卫星绕地球旋转演示动画
  18. Spark优化-开启动态资源分配
  19. AudioStreamBasicDescription: 2 ch, 44100 Hz, ‘lpcm’ (0x00000C2C) 8.24-bit little
  20. 2018年浏览器横向比较

热门文章

  1. android命令行wifi开关,Android系统SVC命令(命令行WIFI开关、GPRS移动数据开关)
  2. 拓端tecdat|python对NOAA天气数据格式转换
  3. 计算机控制开关,开关电源的计算机控制系统
  4. 【286页干货】一天搞懂深度学习(台湾资料科学年会课程)李宏毅
  5. OpenCV编译、安装、测试
  6. 用Cython编译Python的C扩展
  7. Process finished with exit code 0 报错解决方法
  8. dubbo service注解用法_dubbo学习(四)配置dubbo 注解方式配置
  9. geekbench 3 android,Geekbench列表声称Xperia 3将包含12GB RAM并运行Android 10
  10. LRC软件测试简历,C语言 LRC歌词文件解析