如何用 Java 高效的生成随机数?Random 的原理是什么?
2024-05-16 09:05:50 软件 154观看
摘要在 JDK的java.util包里提供了一个用于生成随机数的Random类,它是如何生成随机数的?为什么它生成的随机数是均匀的?今天我们一起来聊聊其背后的原理。本文基于Java语言,jdk 11。1. java.util.RandomRandom是 java.util 包

在 JDK的java.util包里提供了一个用于生成随机数的Random类,它是如何生成随机数的?为什么它生成的随机数是均匀的?今天我们一起来聊聊其背后的原理。En728资讯网——每日最新资讯28at.com

本文基于Java语言,jdk 11。En728资讯网——每日最新资讯28at.com

En728资讯网——每日最新资讯28at.com

En728资讯网——每日最新资讯28at.com

1. java.util.Random

Random是 java.util 包提供的一个用于生成随机数的类,首先,我们看看官方对它的描述:En728资讯网——每日最新资讯28at.com

En728资讯网——每日最新资讯28at.com

通过源码,我们总结出几个核心点:En728资讯网——每日最新资讯28at.com

  • Random类的实例是用来生成一系列的伪随机数;
  • Random类使用一个 48位的种子(seed),通过线性同余算法进行修改;
  • Random类的特定算法被指定,所以,两个Random类的实例使用相同的种子创建,并且对于每个实例都调用相同顺序的方法,它们将生成并返回相同的数字序列
  • Random类是线程安全的,但是,跨线程同时使用同一个java.util.Random实例可能会遇到竞争和相应的性能问题;
  • 在多线程设计中,考虑使用java.util.concurrent.ThreadLocalRandom;
  • Random类的实例不是密码安全的,对于安全敏感的应用程序,考虑使用java.security.SecureRandom;

2. 什么是伪随机数?

伪随机数指的是一种看起来像随机数的序列,但实际上是由确定性算法生成的。这种算法称为伪随机数生成器(PRNG,Pseudo-Random Number Generator)。En728资讯网——每日最新资讯28at.com

PRNG使用一个称为”种子”的初始值,然后通过一系列的数学运算来生成一个序列,这个序列看起来具有随机性的特征,比如均匀分布、无序性等。En728资讯网——每日最新资讯28at.com

3. 什么是种子(seed)?

在随机数生成器中,种子(seed)其实就是一个起始值,它用于初始化随机数生成器的状态。随机数生成器使用这个种子来确定生成随机数的序列。种子决定了随机数生成器的初始状态,因此给定相同的种子,将会生成相同的随机数序列。En728资讯网——每日最新资讯28at.com

4. 线性同余算法

线性同余算法(LCG,Linear Congruential Generator)是最基本的伪随机数生成算法之一,该算法通常使用如下方程表示:En728资讯网——每日最新资讯28at.com

 
			

本文链接:http://www.28at.com/showinfo-26-88333-0.html如何用 Java 高效的生成随机数?Random 的原理是什么?

声明:本网页内容旨在传播知识,不代表本站观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。

显示全文

最新热点