Random、 ThreadLocalRandom、 SecureRandom区别及使用场景

1、JDK随机数生成提供了三种方式,每种方式的使用场景不同,我们平时使用Random比较频繁。
但在阿里巴巴开发手册有一条推荐的使用建议:

【推荐】避免 Random 实例被多线程使用,虽然共享该实例是线程安全的,但会因竞争同一
seed 导致的性能下降。
说明:Random 实例包括 java.util.Random 的实例或者 Math.random()实例。
正例:在 JDK7 之后,可以直接使用 API ThreadLocalRandom,在 JDK7 之前,可以做到每个
线程一个实例。

如上简单理解就是Random和ThreadLocalRandom 在多线程使用场景中做出了区分。

2、如果我们的系统对安全要求较高时我们需要使用SecureRandom来完成随机数的生成。
需要说明的是,程序在对安全做提升时一般都会加入一些复杂的加密算法的逻辑,所以性能都会相对有所下降。

3、做个简单总结
Random 是线程安全的、不是加密安全的
ThreadLocalRandom 多线程设计中使用
SecureRandom 加密安全的伪随机数生成器

4、以上内容有个权威的解释
官网解释

我是老王。不做隔壁的邻居,只想交个朋友。
欢迎关注我的公众号[王自简]
以上内容若引起您的不适,欢迎指正!您的批评是我成长的动力!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值