1、JDK随机数生成提供了三种方式,每种方式的使用场景不同,我们平时使用Random比较频繁。
但在阿里巴巴开发手册有一条推荐的使用建议:
【推荐】避免 Random 实例被多线程使用,虽然共享该实例是线程安全的,但会因竞争同一
seed 导致的性能下降。
说明:Random 实例包括 java.util.Random 的实例或者 Math.random()实例。
正例:在 JDK7 之后,可以直接使用 API ThreadLocalRandom,在 JDK7 之前,可以做到每个
线程一个实例。
如上简单理解就是Random和ThreadLocalRandom 在多线程使用场景中做出了区分。
2、如果我们的系统对安全要求较高时我们需要使用SecureRandom来完成随机数的生成。
需要说明的是,程序在对安全做提升时一般都会加入一些复杂的加密算法的逻辑,所以性能都会相对有所下降。
3、做个简单总结
Random 是线程安全的、不是加密安全的
ThreadLocalRandom 多线程设计中使用
SecureRandom 加密安全的伪随机数生成器
4、以上内容有个权威的解释
官网解释
我是老王。不做隔壁的邻居,只想交个朋友。
欢迎关注我的公众号[王自简]
以上内容若引起您的不适,欢迎指正!您的批评是我成长的动力!