当前位置:首页 > 科技  > 软件

如何用 Java 高效的生成随机数?Random 的原理是什么?

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

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

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

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

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

1. java.util.Random

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

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

通过源码,我们总结出几个核心点:dQA28资讯网——每日最新资讯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)。dQA28资讯网——每日最新资讯28at.com

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

3. 什么是种子(seed)?

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

4. 线性同余算法

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

 
                

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

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 聊聊C#中的委托与事件

下一篇: Python中的文档处理神器:深度解析python-docx库

标签:
  • 热门焦点
  • 小米降噪蓝牙耳机Necklace分享:听一首歌 读懂一个故事

    小米降噪蓝牙耳机Necklace分享:听一首歌 读懂一个故事

    在今天下午的小米Civi 2新品发布会上,小米还带来了一款新的降噪蓝牙耳机Necklace,我们也在发布结束的第一时间给大家带来这款耳机的简单分享。现在大家能见到最多的蓝牙耳机
  • 线程通讯的三种方法!通俗易懂

    线程通讯的三种方法!通俗易懂

    线程通信是指多个线程之间通过某种机制进行协调和交互,例如,线程等待和通知机制就是线程通讯的主要手段之一。 在 Java 中,线程等待和通知的实现手段有以下几种方式:Object 类下
  • 一篇聊聊Go错误封装机制

    一篇聊聊Go错误封装机制

    %w 是用于错误包装(Error Wrapping)的格式化动词。它是用于 fmt.Errorf 和 fmt.Sprintf 函数中的一个特殊格式化动词,用于将一个错误(或其他可打印的值)包装在一个新的错误中。使
  • .NET 程序的 GDI 句柄泄露的再反思

    .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 讲故事上个月我写过一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,当时用的是 GDIView + WinDbg 把问题搞定,前者用来定位泄露资源,后者用来定位泄露代码,后面有朋友反
  • 每天一道面试题-CPU伪共享

    每天一道面试题-CPU伪共享

    前言:了不起:又到了每天一到面试题的时候了!学弟,最近学习的怎么样啊 了不起学弟:最近学习的还不错,每天都在学习,每天都在进步! 了不起:那你最近学习的什么呢? 了不起学弟:最近在学习C
  • 本地生活这块肥肉,拼多多也想吃一口

    本地生活这块肥肉,拼多多也想吃一口

    出品/壹览商业 作者/李彦编辑/木鱼拼多多也看上本地生活这块蛋糕了。近期,拼多多在App首页“充值中心”入口上线了本机生活界面。壹览商业发现,该界面目前主要
  • 阿里瓴羊One推出背后,零售企业迎数字化新解

    阿里瓴羊One推出背后,零售企业迎数字化新解

    作者:刘旷近年来随着数字经济的高速发展,各式各样的SaaS应用服务更是层出不穷,但本质上SaaS大多局限于单一业务流层面,对用户核心关切的增长问题等则没有提供更好的解法。在Saa
  • 造车两年股价跌六成,小米的估值逻辑变了吗?

    造车两年股价跌六成,小米的估值逻辑变了吗?

    如果从小米官宣造车后的首个交易日起持有小米集团的股票,那么截至2023年上半年最后一个交易日,投资者将浮亏59.16%,同区间的恒生科技指数跌幅为52.78%
  • 国行版三星Galaxy Z Fold5/Z Flip5发布 售价7499元起

    国行版三星Galaxy Z Fold5/Z Flip5发布 售价7499元起

    2023年8月3日,三星电子举行Galaxy新品中国发布会,正式在国内推出了新一代折叠屏智能手机三星Galaxy Z Fold5与Galaxy Z Flip5,以及三星Galaxy Tab S9
Top
Baidu
map