在Java标准库中,我们有两个主要的随机数生成器:Random和SecureRandom。虽然它们都用于生成随机数,但它们的原理、用途和性能特点却有所不同。下面我们将详细分析这两种随机数生成器的原理。 Random类 Random类是Java中最基本的随机数生成器。它使用线性同余生成器(LCG,Linear Congruential Generator)算法来生成伪随机数。
publicstaticdoublerandom(){Randomrnd=randomNumberGenerator;if(rnd ==null) rnd = initRNG();// 第一次调用,创建一个伪随机数生成器returnrnd.nextDouble(); }privatestaticsynchronizedRandominitRNG(){Randomrnd=randomNumberGenerator;return(rnd ==null) ? (randomNumberGenerator =newRandom()) : rnd;// ...
1、Random类 Random 是 java.util 包中的一个类,可以在指定的取值范围内随机产生数字。 Random 类内部采用伪随机数算法,简单来说就是基于一个种子(long 型值),经过特定的迭代计算得到一个结果,作为产生的随机数。当这个种子是随机数时,产生的结果也是随机数;当这个种子是固定值时,产生的结果也是固定值。 Random...
创建一个伪随机数生成器returnrnd.nextDouble();}privatestaticsynchronizedRandominitRNG(){Randomrnd=randomNumberGenerator;return(rnd==null)?(randomNumberGenerator=newRandom()):rnd;// 实际上用的是new java.util.Random()}
当第一次调用Math.random()方法时,自动创建了一个伪随机数生成器,实际上用的是new java.util.Random()。当接下来继续调用Math.random()方法时,就会使用这个新的伪随机数生成器。 源码如下: publicstaticdoublerandom() { Random rnd=randomNumberGenerator;if(rnd ==null) rnd = initRNG();//第一次调用,创...
random = new SecureRandom(); rand = random.nextInt(19);//这里的数值是[0,19) 开区间 1. 2. 之前一般都是采用Random对象来实现。不过,该对象最好需要一个seed种子。它产生的序列一般都是伪随机数序列。 SecureRandom这个对象是更高级还是如何?
二. Random随机类 1. 简介 我们在开发时,除了操作一些固定的数字之外,有时候还要操作一些不确定的随机数。Java中给我们提供了两种生成指定范围内随机数的方法:● 使用Random类:伪随机数类,用来创建伪随机数。所谓伪随机数,就是指我们只要给定一个初始的种子,产生的随机数序列是完全一样的;● 调用Math类的...
Java里有伪随机型和安全型两种随机数生成器,伪随机生成器,根据特定公式将seed转换成新的伪随机数据的一部分;安全随机生成器,底层依赖到操作系统提供的随机事件来生成数据。 1、伪随机型 Math.random()。随机生成一个double类型[0,1)区间的值,效率低下,基本不用了; Random。创建对象,默认以系统当前时间戳作为seed...
java中常用的三个随机数类: Random ThreadLocalRandom SecureRandom Random 是最常用的类,ThreadLocalRandom 性能快,SecureRandom 注重安全。 下面简单分析3个类的使用。 Random 伪随机数生成器,可以传一个种子来生成随机数。 种子就是一个指定的变量,用来参与生成随机数,如果什么都不传,默认使用System.nanoTime()来参...
ThreadLocalRandom 即:java.util.concurrent.ThreadLocalRandom SecureRandom即:java.security.SecureRandom Q:Random是不是线程安全的? A:Random是线程安全的,但是多线程下可能性能比较低。 参考: http://docs.oracle.com/javase/7/docs/api/java/util/Random.htmlhttp://stackoverflow.com/qu...