Java生成随机数的几种方式:Random,ThreadLocalRandom,SecureRandom与Math.random()

Random

Random的本质就是根据设置的种子,执行一个固定的算法得到结果,这就意味着如果多个实例种子一样且调用顺序一致时返回的是同样的结果。默认的种子是System.currentTimeMillis()。线程安全,在多线程下性能较差。

public class RandomDemo {
 
    public static void main(String[] args) {
        // 线程安全,在多线程下性能较差
        Random random1 = new Random(2); // 不设置种子时,种子默认为System.currentTimeMillis(),不会导致以下返回同样结果的问题
        Random random2 = new Random(2);
        Random random3 = new Random(2);
        System.out.println(random1.nextBoolean());  //true
        System.out.println(random1.nextLong()); // 5411842376618821008
        System.out.println(random2.nextLong()); // -4959463499243013640
        System.out.println(random3.nextLong()); // -4959463499243013640  种子一样且调用顺序一致时返回的是同样的结果
    }
 
}

ThreadLocalRandom

ThreadLocalRandom继承自Random。线程安全,在多线程下具有较好的性能,无法设置种子,所以也不会出现种子一致且调用顺序一致时传出现的随机数一致的情况

// 线程安全,在多线程下具有较好的性能,没法设置种子,所以也不会出现种子一致且调用顺序一致时传出现的随机数一致的情况
System.out.println(ThreadLocalRandom.current().nextLong());// 191403865608614265
System.out.println(ThreadLocalRandom.current().nextLong());// 7511566053367412453
System.out.println(ThreadLocalRandom.current().nextLong());// 4667700042531046115

SecureRandom

SecureRandom类收集了一些操作系统的随机事件,比如鼠标点击,键盘点击等等,SecureRandom 使用这些随机事件作为种子。这意味着,种子是不可预测的,一种相对安全的随机数生成器。用来生成密钥之类的安全性较高的随机数。而不像Random默认使用系统当前时间的毫秒数作为种子或者,有规律可寻。

try {
    System.out.println(SecureRandom.getInstance("SHA1PRNG").nextLong());    // -6093059711289970526
} catch (NoSuchAlgorithmException e) {
    e.printStackTrace();
} 

Math.random()

返回0.0和1.0之间的double,其底层其实就是Random.nextDouble()。

// 返回0.0和1.0之间的double
System.out.println(Math.random()); // 0.37397664389057095
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yue_hu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值