java自定义随机数生成_Java 随机数生成

1、new Random() 和 Math.random() 的区别

简单粗暴的理解,可以将Math.random()归为new Random()中的一部分,因为Math.random()的Random.nextDouble()中的内部方法

Math.random() 使用相对于 new Random() 功能更加单一,仅支持无参方式获取伪随机数,生成范围为 0 到 1 - (2 ^ -53)

new Random() 提供多种类型随机数获取的,除去生成结果类型多样化这一特点外,它还支持生成指定范围内的随机数,同时也可以指定构建时的种子数(不建议使用相同的种子数,相同的种子数下生成的随机数相同)

Math.random() 生成随机数的效率要低于 new Random(),在无并发的情况下使用Math.random()相当简单快捷,若存在并发的情况下,使用 new Random()则会更加安全,因为 new Random() 内部使用 synchronized 进行了安全控制

注:Math.random()效率低于 new Random() 的原因是Math.random()会调用Random.next()两次,而Random.nextXXX()使用Random.next()不多于两次

2、new Random() 和 ThreadLocalRandom 的区别

new Random() 和 ThreadLocalRandom 都是数据安全的,但在多线程并发的情况下new Random()效率低于ThreadLocalRandom,因为new Random()使用 synchronized ,而 ThreadLocalRandom 是直接使用绑定到线程上的

注:ThreadLocalRandom实例化操作 -> ThreadLocalRandom random = ThreadLocalRandom.current();

3、SecureRandom 产生随机码

未仔细了解

SecureRandom 生成随机码安全基本是最高的,但使用率很低,暂未了解在何种场景下需要使用此方式来生成随机码。

SecureRandom 它默认有两种生成算法:NativePRNG、SHA1PRNG,默认情况下使用NativePRNG算法生成。

使用方式:

SecureRandom secureRandom = new SecureRandom();

SecureRandom secureRandom3 = SecureRandom.getInstance("SHA1PRNG");

SecureRandom secureRandom2 = SecureRandom.getInstance("SHA1PRNG", "SUN");

例子:

public String getRandomCode(int digits) throws Exception {

String code = String.valueOf((int)(Math.random() * Math.pow(10, digits)));

if (code.length() < digits) {

// 根据位数后置补零

code = "" + (int)(Integer.parseInt(code) * Math.pow(10, digits - code.length()));

}

return code;

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值