java 获得随机数的几种方法

本文介绍了Java中四种生成随机数的方法:使用java.util.Random、java.util.concurrent.ThreadLocalRandom、java.lang.Math.random()及java.security.SecureRandom。针对不同场景推荐使用不同的类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法一:java.util.Random

1.1:创建方法   new Random();   或    new Random(long seed); 两种方法。默认构造函数其实也使用了系统时间与唯一生成器经过异或后得到的值。具体构造函数如下:

public Random() {
        this(seedUniquifier() ^ System.nanoTime());
 }

1.2:得到一定范围的随机数 new Random.nextInt(int bound), 得到一个(0,bound)之间的整数

1.3:Random类为线程安全,但JDK建议我们在多线程里面使用 java.util.concurrent.ThreadLocalRandom。原话如下:Instances of {@code java.util.Random} are threadsafe. However, the concurrent use of the same {@code java.util.Random}  instance across threads may encounter contention and consequent poor performance. Consider instead using {@link java.util.concurrent.ThreadLocalRandom} in multithreaded designs.

方法二:java.util.concurrent.ThreadLocalRandom

2.1:创建方法:  ThreadLocalRandom.current()

2.1:得到随机数 : ThreadLocalRandom.current().nextInt()  等,也可以指定范围,如 nextInt(int bound) 得到(0,bound)之间的随机整数;  nextInt(int origin, int bound) 得到(origin,bound)之间的整数。JDK建议多线程里面使用该类。

方法三:java.lang.Math.random()方法

3.1:使用方法: Math.random(); 返回(0,1)之间的double指。实际上Math.random()方法就是由java.util.Random类实现。具体源码如下:

public static double random() {
        return RandomNumberGeneratorHolder.randomNumberGenerator.nextDouble();
}

private static final class RandomNumberGeneratorHolder {
        static final Random randomNumberGenerator = new Random();
 }

方法四:java.security.SecureRandom

4.1:创建方法:3种方法:new SecureRandom(); ,  或者指定种子创建对象:new SecureRandom(byte seed[]); 再或者通过静态方法:SecureRandom.getInstance(String algorithm)创建对象。

4.2:该类使用确定的算法(如SHA1PRNG) 根据实际的随机种子生成伪随机序列。

其四者关系如下图:



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值