Java SE 随机数生成器 Random
目录
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相关推荐
- Java 随机数生成器 Random SecureRandom 原理分析
文章目录 java.util.Random java.Security.SecureRandom /dev/random 与 /dev/urandom 资料 Java 里提供了一些用于生成随机数的工具 ...
- Java 随机数生成器 Random SecureRandom
Java 里提供了一些用于生成随机数的工具类,这里分析一下其实现原理,以及他们之间的区别.使用场景. java.util.Random Random 是比较常用的随机数生成类,它的基本信息在类的注释里 ...
- Java生成随机数(random()和Random类)
在 Java 中要生成一个指定范围之内的随机数字有两种方法:一种是调用 Math 类的 random() 方法,一种是使用 Random 类. Random 类提供了丰富的随机数生成方法,可以产生 b ...
- Java获取随机数(Random随机数)
代码 package blackhorse; import java.util.Random;//import生成随机数的包 public class RandomNumber {public sta ...
- java 产生随机数(Random用法)
import java.util.*; public class Yancey77{public static void main(String[]args){//产生随机数Random ran=ne ...
- Java 中Random类随机数生成器
*随机数生成器Random类 * * public Random()产生一个随机数生成器 * public Random(long seed):创建随机数生成器的同时,给固定时间值 * ...
- java随机数生成_java实现随机数生成器
本文实例为大家分享了java实现随机数生成器的具体代码,供大家参考,具体内容如下 自己编的随机数生成器,比较简陋,功能也单一,当作练手. Application.java package src; p ...
- 随机数生成器 java_Java中的随机数生成器
随机数生成器 java Today we will look at how to generate a random number in Java. Sometimes we need to gene ...
- java90到100随机数生成器_java实现随机数生成器
本文实例为大家分享了java实现随机数生成器的具体代码,供大家参考,具体内容如下 自己编的随机数生成器,比较简陋,功能也单一,当作练手. application.java package src; p ...
- java产生随机数实例
java产生随机数实例 random 产生随机 Random类用来生成随机数字,使用起来也是三步 导包 import java.uitl.Random; 创建 Random r = new Rando ...
最新文章
- Python安装某个库,出现Read_Time_out错误,那么如何配置 “国内镜像源”呢?
- 修改大表字段属性报主键冲突
- [one day one question] webpack打包压缩 ES6 js、.vue报错
- 【BZOJ4289】Tax,堆优化dijsktra的最短路问题
- 思科c240 m3 服务器安装系统,2U机架式 思科UCS C240 M3让你心动
- 开课吧:深入了解人工智能在金融行业中的应用
- 遇到Python中文目录名问题,未解决
- App测试工具大全,收藏这篇就够了
- 山地车中轴进水表现_山地车中轴异响分析及解决方法
- TRC格列卫(甲磺酸伊马替尼)病毒-宿主融合抑制剂方案
- Vmware安装Ubuntu20.04
- chatter个人理解
- 你唯一需要擅长的事情
- MQTT学习笔记(4)报文分析之PUBLISH
- 小米usb当前设备已被临时限制3-2
- Java jmap与jcmd命令dump内存heap堆
- matlab地球月球卫星关系,Matlab 卫星绕地球旋转演示动画
- Spark优化-开启动态资源分配
- AudioStreamBasicDescription: 2 ch, 44100 Hz, ‘lpcm’ (0x00000C2C) 8.24-bit little
- 2018年浏览器横向比较
热门文章
- android命令行wifi开关,Android系统SVC命令(命令行WIFI开关、GPRS移动数据开关)
- 拓端tecdat|python对NOAA天气数据格式转换
- 计算机控制开关,开关电源的计算机控制系统
- 【286页干货】一天搞懂深度学习(台湾资料科学年会课程)李宏毅
- OpenCV编译、安装、测试
- 用Cython编译Python的C扩展
- Process finished with exit code 0 报错解决方法
- dubbo service注解用法_dubbo学习(四)配置dubbo 注解方式配置
- geekbench 3 android,Geekbench列表声称Xperia 3将包含12GB RAM并运行Android 10
- LRC软件测试简历,C语言 LRC歌词文件解析