随机数性能对比
主题
随机数性能对比
对比方案
三种使用随机数方式,通过 JMH
进行对比:
- 使用
Random
- 使用
ThreadLocalRandom
,但是缓存第一次获得的值(注意,这是错误的使用方法) - 使用
ThreadLocalRandom
,每次读取(注意,这是正确的使用方法)
JMH 测试代码
package random; |
测试结果
JMH version: 1.21 |
解读
java.util.Random
很慢,毫无疑问- 就算不正确使用的情况下,
ThreadLocalRandom
仍然比Random
快 - 明显可以看到,不正确使用下,
ThreadLocalRandom
的波动比正确使用时高许多。(数据中±
后面部分即波动范围。) - 正确使用
ThreadLocalRandom
情况下,是使用Random
的50倍 - 在正式生产环境下,由于线程更多,
Random
改ThreadLocalRandom
获得的收益可能更大。因为潜在的争抢点消失了一个,阻塞的线程会减少许多。(测试中只有四个线程,不能和生产比。) - 这里只讨论了
Random
和ThreadLocalRandom
,不涉及SecureRandom
。