Random,ThreadLocalRandom,SecureRandom是Java中的随机数生成器,其中ThreadLocalRandom是jdk7才出现的,是Random的增强版。在并发访问的环境下,使用ThreadLocalRandom来代替Random可以减少多线程竞争,最终保证系统具有更好的线程安全。
Random是线程安全的,但是多线程下可能性能比较低。
特别是在生成验证码的情况下,不要使用Random,因为它是线性可预测的。所以在安全性要求比较高的场合,应当使用SecureRandom。
从理论上来说计算机产生的随机数都是伪随机数,要想产生高强度的随机数,有两个重要的因素:种子和算法。当然算法是可以有很多的,但是如何选择种子是非常关键的因素。如Random,它的种子是System.currentTimeMillis(),所以它的随机数都是可预测的。那么如何得到一个近似随机的种子?这里有一个很别致的思路:收集计算机的各种信息,如键盘输入时间,CPU时钟,内存使用状态,硬盘空闲空间,IO延时,进程数量,线程数量等信息,来得到一个近似随机的种子。这样的话,除了理论上有破解的可能,实际上基本没有被破解的可能。而事实上,现在的高强度的随机数生成器都是这样实现的。
详细解决方案
Random,ThreadLocalRandom,SecureRandom的几点思考
热度:14 发布时间:2024-01-29 21:48:15.0
相关解决方案
- JAVA 随机数 Random,求好手
- Math.Random()随机数是怎么产生的
- 突然很奇怪(int)Math.random()*10只等于0,该怎么处理
- 忽然很奇怪(int)Math.random()*10只等于0
- W3SCHOOL 里面的这个代码加上 Math.random()是什么意思啊
- javascript中Math.random()运用
- setInterval("document.write(Math.random())"1000)为何不行?解决办法
- (Math.floor(Math.random()*3)==0))是什么?解决思路
- 为什么要加Math.random()解决方法
- Random rand =new Random(47);解决方法
- Java中Math.random()的取值有关问题
- 施用 Math.random()来实现百钱百鸡方法
- 至于java中随即数产生函数Math.random()
- 请问有关Math.random()取整数位数的有关问题
- 为什么random.random()会占用两个random.randint()值?
- python标准库——random,随机函数
- JavaScript random() 方法
- python-随机模块-random
- js生成一个范围内随机数Math.random
- np.random.normal()函数
- python---random
- python--random
- Random 随机数类
- Java基础——Random
- Random、随机颜色、UUID、全球唯一,随机字符串
- java.util.Random###随机数输出其阶乘
- li shell random
- java 使用Random和Math.random()去生成10以内的随机数
- 【JavaScript】------- JavaScript 讲解随机数math.random()实用
- uva-350 - Pseudo-Random Numbers