Module  java.base
软件包  java.util.concurrent

Class ThreadLocalRandom

  • All Implemented Interfaces:
    Serializable


    public class ThreadLocalRandom
    extends Random
    与当前线程隔离的随机数生成器。 Math类使用的全局Random发生器一样, ThreadLocalRandom用内部生成的种子进行初始化,可能不会被修改。 适用时,在并发程序中使用ThreadLocalRandom而不是共享的Random对象通常会遇到更少的开销和争用。 当多个任务(例如,每个ForkJoinTask )在线程池中并行使用随机数时,使用ThreadLocalRandom是特别合适的。

    这个类的用途通常应该是这样的形式: ThreadLocalRandom.current().nextX(...) (其中XIntLong等)。 当所有用法都是这种形式时,绝对不可能跨多个线程共享一个ThreadLocalRandom

    该类还提供了其他常用的有界随机生成方法。

    ThreadLocalRandom实例不是加密安全的。 考虑在安全敏感的应用程序中使用SecureRandom 此外,除非默认构造的情况下,不使用加密的随机种子system property java.util.secureRandomSeed设置为true

    从以下版本开始:
    1.7
    另请参见:
    Serialized Form
    • 方法摘要

      所有方法  静态方法  接口方法  具体的方法 
      Modifier and Type 方法 描述
      static ThreadLocalRandom current​()
      返回当前线程的 ThreadLocalRandom
      DoubleStream doubles​()
      返回一个有效的无限流的伪随机数 double值,每个值在零(包括)和一(独占)之间。
      DoubleStream doubles​(double randomNumberOrigin, double randomNumberBound)
      返回一个有效的无限流的伪随机数 double值,每个符合给定的起始(包括)和绑定(排他)。
      DoubleStream doubles​(long streamSize)
      返回一个流,产生给定的 streamSize伪随机数 double数值,每个值在零(包括)和一(独占)之间。
      DoubleStream doubles​(long streamSize, double randomNumberOrigin, double randomNumberBound)
      返回一个流,产生给定的 streamSize伪随机数 double值,每个值符合给定的起始(包括)和绑定(排他)。
      IntStream ints​()
      返回一个有效的无限流的伪随机数 int值。
      IntStream ints​(int randomNumberOrigin, int randomNumberBound)
      返回一个有效无限流的伪随机数 int ,每个值都符合给定的起始(包括)和绑定(排除)。
      IntStream ints​(long streamSize)
      返回一个流,产生给定的 streamSize数量的伪随机数 int值。
      IntStream ints​(long streamSize, int randomNumberOrigin, int randomNumberBound)
      返回一个流,产生给定的 streamSize数量的伪随机数 int值,每个符合给定的起始(包括)和绑定(排他)。
      LongStream longs​()
      返回一个有效的无限流的伪随机数 long值。
      LongStream longs​(long streamSize)
      返回一个流,产生给定的 streamSize数量的伪随机数 long值。
      LongStream longs​(long randomNumberOrigin, long randomNumberBound)
      返回一个有效的无限流的伪随机数 long值,每个符合给定的起始(包括)和绑定(排他)。
      LongStream longs​(long streamSize, long randomNumberOrigin, long randomNumberBound)
      返回产生所述给定流 streamSize数的伪随机的 long ,每个符合给定的原点(含)和结合(不包括)。
      protected int next​(int bits)
      生成带有指定数量的低位位的伪随机数。
      boolean nextBoolean​()
      返回一个伪随机值 boolean
      double nextDouble​()
      返回0(包括)和1(排除)之间的伪随机值 double
      double nextDouble​(double bound)
      返回值在0.0(含)之间的伪随机数 double和指定的约束(排除)之间。
      double nextDouble​(double origin, double bound)
      返回指定原点(包括)和绑定(排除)之间的伪随机值 double
      float nextFloat​()
      返回在零(包括)和一(独占)之间的伪随机 float值。
      double nextGaussian​()
      从该随机数发生器的序列返回下一个伪随机,高斯(“正”)分布的 double值,平均值为 0.0 ,标准偏差为 1.0
      int nextInt​()
      返回一个伪随机值 int
      int nextInt​(int bound)
      返回零(含)和指定边界(排除)之间的伪随机值 int
      int nextInt​(int origin, int bound)
      返回指定的起始(含)和指定的界限(排除)之间的伪随机值 int
      long nextLong​()
      返回一个伪随机数 long值。
      long nextLong​(long bound)
      返回0(包括)和指定的bound(exclusive)之间的伪随机值 long
      long nextLong​(long origin, long bound)
      返回指定原点(含)和指定边界(独占)之间的伪随机数 long值。
      void setSeed​(long seed)
      投掷 UnsupportedOperationException
    • 方法详细信息

      • current

        public static ThreadLocalRandom current​()
        返回当前线程的 ThreadLocalRandom
        结果
        当前线程的 ThreadLocalRandom
      • setSeed

        public void setSeed​(long seed)
        投掷UnsupportedOperationException 不支持在此生成器中设置种子。
        重写:
        setSeedRandom
        参数
        seed - 初始种子
        异常
        UnsupportedOperationException - 永远
      • next

        protected int next​(int bits)
        生成带有指定数量的低位位的伪随机数。 因为此类没有子类,所以无法调用或覆盖此方法。
        重写:
        nextRandom
        参数
        bits - 随机位
        结果
        来自该随机数发生器序列的下一个伪随机值
      • nextInt

        public int nextInt​()
        返回一个伪随机数 int值。
        重写:
        nextIntRandom
        结果
        一个伪随机的价值 int
      • nextInt

        public int nextInt​(int bound)
        返回零(含)和指定边界(排除)之间的伪随机值 int
        重写:
        nextIntRandom
        参数
        bound - 上限(独占)。 必须是积极的。
        结果
        零(包括)和绑定(独占)之间的伪随机值 int
        异常
        IllegalArgumentException - 如果 bound
      • nextInt

        public int nextInt​(int origin,
                           int bound)
        返回指定原点(含)和指定边界(排除)之间的伪随机值 int
        参数
        origin - 返回的值最小
        bound - 上限(独占)
        结果
        原始(含)和绑定(排他性)之间的伪随机 int
        异常
        IllegalArgumentException - 如果 origin大于或等于 bound
      • nextLong

        public long nextLong​()
        返回一个伪随机值 long
        重写:
        nextLongRandom
        结果
        一个伪随机数 long
      • nextLong

        public long nextLong​(long bound)
        返回0(包括)和指定的bound(exclusive)之间的伪随机值 long
        参数
        bound - 上限(独占)。 必须是积极的。
        结果
        一个伪随机 longlong在零(包括)和绑定(排除)之间的值
        异常
        IllegalArgumentException - 如果 bound
      • nextLong

        public long nextLong​(long origin,
                             long bound)
        返回指定的起始点(含)和指定的边界(排除)之间的伪随机值 long
        参数
        origin - 返回的值最小
        bound - 上限(独占)
        结果
        原始(含)和绑定(排他性)之间的伪随机 long
        异常
        IllegalArgumentException - 如果 origin大于或等于 bound
      • nextDouble

        public double nextDouble​()
        返回0(包括)和1(独占)之间的伪随机值 double
        重写:
        nextDoubleRandom
        结果
        零(含)和一(独占)之间的伪随机 double
        另请参见:
        Math.random()
      • nextDouble

        public double nextDouble​(double bound)
        返回值在0.0(含)和指定的约束(排除)之间的伪随机数 double
        参数
        bound - 上限(独占)。 必须是积极的。
        结果
        零(包括)和绑定(排他性)之间的伪随机 double
        异常
        IllegalArgumentException - 如果 bound
      • nextDouble

        public double nextDouble​(double origin,
                                 double bound)
        返回指定的起始(含)和绑定(排除)之间的伪随机值 double
        参数
        origin - 返回的最小值
        bound - 上限(独占)
        结果
        原始(含)和限制(排除)之间的伪随机值 double
        异常
        IllegalArgumentException - 如果 origin大于或等于 bound
      • nextBoolean

        public boolean nextBoolean​()
        返回一个伪随机值 boolean
        重写:
        nextBooleanRandom
        结果
        一个伪随机数 boolean
      • nextFloat

        public float nextFloat​()
        返回零(含)和一(独占)之间的伪随机数 float
        重写:
        nextFloatRandom
        结果
        零(包括)和一(独占)之间的伪随机 float
      • nextGaussian

        public double nextGaussian​()
        描述从类别复制Random
        从该随机数发生器的序列返回下一个伪随机,高斯(“正”)分布的double值,平均值为0.0 ,标准差为1.0

        nextGaussian的一般合同是从(大约)平均0.0和标准差1.0的常规正态分布中选出的一个double值被伪随机生成并返回。

        方法nextGaussian由类Random实现,如同通过以下的线程安全版本一样:

           private double nextNextGaussian; private boolean haveNextNextGaussian = false; public double nextGaussian() { if (haveNextNextGaussian) { haveNextNextGaussian = false; return nextNextGaussian; } else { double v1, v2, s; do { v1 = 2 * nextDouble() - 1; // between -1.0 and 1.0 v2 = 2 * nextDouble() - 1; // between -1.0 and 1.0 s = v1 * v1 + v2 * v2; } while (s >= 1 || s == 0); double multiplier = StrictMath.sqrt(-2 * StrictMath.log(s)/s); nextNextGaussian = v2 * multiplier; haveNextNextGaussian = true; return v1 * multiplier; } } 
        这使用GEP Box,ME Muller和G. Marsaglia的极性方法 ,如Donald E. Knuth在“计算机编程艺术”第2卷: Seminumerical Algorithms ,第3.4.1节,C节,算法P中所述。请注意它产生两个独立的值,其代价是只有一个呼叫为StrictMath.log ,一个呼叫为StrictMath.sqrt
        重写:
        nextGaussianRandom
        结果
        下一个伪随机数,高斯(“正常”)分布 double值,平均值为 0.0 ,标准偏差为 1.0来自该随机数发生器的序列
      • ints

        public IntStream ints​(long streamSize)
        返回一个流,产生给定的 streamSize伪随机数 int值。
        重写:
        intsRandom
        参数
        streamSize - 要生成的值的数量
        结果
        一串伪随机数 int
        异常
        IllegalArgumentException - 如果 streamSize小于零
        从以下版本开始:
        1.8
      • ints

        public IntStream ints​()
        返回一个有效的无限流的伪随机数 int值。
        重写:
        intsRandom
        Implementation Note:
        该方法实现为等同于 ints(Long.MAX_VALUE)
        结果
        一串伪随机的数值 int
        从以下版本开始:
        1.8
      • ints

        public IntStream ints​(long streamSize,
                              int randomNumberOrigin,
                              int randomNumberBound)
        返回一个流,产生给定的 streamSize伪随机数 int值,每个值符合给定的起始(包括)和绑定(排他)。
        重写:
        intsRandom
        参数
        streamSize - 要生成的值的数量
        randomNumberOrigin - 每个随机值的起点(含)
        randomNumberBound - 每个随机值的绑定(排他)
        结果
        一个伪随机数 int值,每个具有给定的起始(包括)和绑定(排他)
        异常
        IllegalArgumentException - 如果 streamSize小于零,或 randomNumberOrigin大于或等于 randomNumberBound
        从以下版本开始:
        1.8
      • ints

        public IntStream ints​(int randomNumberOrigin,
                              int randomNumberBound)
        返回一个有效无限流的伪随机数 int值,每个符合给定的起始(包括)和绑定(排他)。
        重写:
        intsRandom
        Implementation Note:
        该方法实现等同于 ints(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound)
        参数
        randomNumberOrigin - 每个随机值的起点(含)
        randomNumberBound - 每个随机值的绑定(排他)
        结果
        一个伪随机 intint ,每个都有给定的来源(包括)和绑定(排他)
        异常
        IllegalArgumentException - 如果 randomNumberOrigin大于或等于 randomNumberBound
        从以下版本开始:
        1.8
      • longs

        public LongStream longs​(long streamSize)
        返回一个流,产生给定的 streamSize伪随机数 long数值。
        重写:
        longsRandom
        参数
        streamSize - 要生成的值的数量
        结果
        一串伪随机数 long
        异常
        IllegalArgumentException - 如果 streamSize小于零
        从以下版本开始:
        1.8
      • longs

        public LongStream longs​()
        返回一个有效的无限流的伪随机数 long值。
        重写:
        longsRandom
        Implementation Note:
        该方法实现为等同于 longs(Long.MAX_VALUE)
        结果
        一串伪随机的数值 long
        从以下版本开始:
        1.8
      • longs

        public LongStream longs​(long streamSize,
                                long randomNumberOrigin,
                                long randomNumberBound)
        返回一个流,产生给定的 streamSize伪随机数 long ,每个符合给定的起始(包括)和绑定(排他)。
        重写:
        longsRandom
        参数
        streamSize - 要生成的值的数量
        randomNumberOrigin - 每个随机值的起始(含)
        randomNumberBound - 每个随机值的绑定(排他)
        结果
        一个伪随机的 long ,每个都有给定的来源(包括)和绑定(排他)
        异常
        IllegalArgumentException - 如果 streamSize小于零,或 randomNumberOrigin大于或等于 randomNumberBound
        从以下版本开始:
        1.8
      • longs

        public LongStream longs​(long randomNumberOrigin,
                                long randomNumberBound)
        返回一个有效的无限流的伪随机数 long值,每个符合给定的起始(包括)和绑定(排他)。
        重写:
        longsRandom
        Implementation Note:
        该方法实现为等同于 longs(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound)
        参数
        randomNumberOrigin - 每个随机值的起点(含)
        randomNumberBound - 每个随机值的绑定(排他)
        结果
        一个伪随机数 long ,每个都有给定的来源(包括)和绑定(排他)
        异常
        IllegalArgumentException - 如果 randomNumberOrigin大于或等于 randomNumberBound
        从以下版本开始:
        1.8
      • doubles

        public DoubleStream doubles​(long streamSize)
        返回一个流,产生给定的 streamSize数量的伪随机数 double值,每个值在零(包括)和一(独占)之间。
        重写:
        doublesRandom
        参数
        streamSize - 要生成的值的数量
        结果
        一串 double
        异常
        IllegalArgumentException - 如果 streamSize小于零
        从以下版本开始:
        1.8
      • doubles

        public DoubleStream doubles​()
        返回一个有效的无限流伪随机数 double值,每个值在零(包括)和一(独占)之间。
        重写:
        doublesRandom
        Implementation Note:
        该方法实现等于 doubles(Long.MAX_VALUE)
        结果
        一串伪随机的数值 double
        从以下版本开始:
        1.8
      • doubles

        public DoubleStream doubles​(long streamSize,
                                    double randomNumberOrigin,
                                    double randomNumberBound)
        返回一个流,产生给定的 streamSize伪随机数 double值,每个值符合给定的起始(包括)和绑定(排他)。
        重写:
        doublesRandom
        参数
        streamSize - 要生成的值的数量
        randomNumberOrigin - 每个随机值的起点(含)
        randomNumberBound - 每个随机值的绑定(排他)
        结果
        一个伪随机数( double ,每个都有给定的来源(包括)和绑定(排他)
        异常
        IllegalArgumentException - 如果 streamSize小于零,或 randomNumberOrigin大于或等于 randomNumberBound
        从以下版本开始:
        1.8
      • doubles

        public DoubleStream doubles​(double randomNumberOrigin,
                                    double randomNumberBound)
        返回一个有效的无限流的伪随机数 double ,每个符合给定的起始(包括)和绑定(排他)。
        重写:
        doublesRandom
        Implementation Note:
        该方法实现为等同于 doubles(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound)
        参数
        randomNumberOrigin - 每个随机值的起点(含)
        randomNumberBound - 每个随机值的绑定(排他)
        结果
        一个伪随机数 double ,每个都有给定的来源(包括)和绑定(排他)
        异常
        IllegalArgumentException - 如果 randomNumberOrigin大于或等于 randomNumberBound
        从以下版本开始:
        1.8