Java随机数小结

Java随机数

1、Math.random() 静态方法

0 ~ 1的double

第一次调用时,自动创建伪随机数生成器,即new java.util.Random(),之后都使用该生成器

  • initRNG()方法是synchronized的,多线程时一个线程创建伪随机数生成器(使用当前时间作为种子),其他线程利用该生成器

  • 若各线程各自创建生成器,碰巧种子相同,则会结果相同,导致生成线程不安全

2、java.util.Random 工具类

基本算法

  • Linear congruential pseudorandom number generate (LGC 线性同余法)
  • 缺点:可预测 (默认以系统当前时钟作为种子)
  • 种子一样时,产生的随机数也一样

3、java.util.concurrent.ThreadLocalRandom 工具类

每个线程有一个独立的随机数生成器

  • ThreadLocalRandom不通过new实例化
  • 是第一次使用其静态方法current(),得到ThreadLocal< ThreadLocalRandom >实例化
  • 然后调用Random类的各个方法

4、java.Security.SecureRandom

提供了加密的强随机数生成器(RNG)

种子必须不可预知,产生非确定输出,也提供了实现算法无关的算法

  • 仅指定算法名称:SecureRandom.getInstance("SHA1PRNG");
  • 算法+包:SecureRandom.getInstance("SHA1PRNG", "SUN");

5、随机字符串

RandomStringUtil类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值