JAVA 随机函数

news/2025/11/11 18:38:00/文章来源:https://www.cnblogs.com/aibi1/p/19211287

目录
  • 1. 日常开发(非安全场景):ThreadLocalRandom(推荐)
  • 2. 单线程/简单场景:Random
  • 3. 安全场景(如密码、Token生成):SecureRandom
  • 4. Java 8+ 流式处理:Random 结合流
  • 关键总结

在 Java 中生成随机数的“靠谱”实现,需要根据具体场景(如安全性、性能、随机性要求)选择合适的工具类。以下是几种常用方案及适用场景,按推荐优先级排序:

1. 日常开发(非安全场景):ThreadLocalRandom(推荐)

  • 优势:线程安全、高性能(避免线程竞争)、随机性良好,专为多线程环境设计。
  • 适用场景:普通业务逻辑(如随机数生成、抽奖、随机排序等非加密场景)。
  • 使用示例
    import java.util.concurrent.ThreadLocalRandom;public class RandomExample {public static void main(String[] args) {// 获取当前线程的随机数实例ThreadLocalRandom random = ThreadLocalRandom.current();// 生成 [0, 100) 之间的整数int intVal = random.nextInt(100);// 生成 [5, 10] 之间的整数int rangeVal = random.nextInt(5, 11);// 生成随机布尔值boolean boolVal = random.nextBoolean();// 生成 [0.0, 1.0) 之间的doubledouble doubleVal = random.nextDouble();}
    }
    

2. 单线程/简单场景:Random

  • 优势:API 简单,适合单线程或低并发场景。
  • 注意:多线程环境下使用同一个 Random 实例会导致竞争,性能下降,且可能降低随机性。
  • 使用示例
    import java.util.Random;public class RandomExample {public static void main(String[] args) {Random random = new Random();int intVal = random.nextInt(100); // [0, 100)long longVal = random.nextLong();float floatVal = random.nextFloat(); // [0.0f, 1.0f)}
    }
    

3. 安全场景(如密码、Token生成):SecureRandom

  • 优势:加密级随机性,通过系统熵源(如 /dev/random)生成,适合需要高安全性的场景(如生成密钥、验证码、令牌等)。
  • 注意:性能较低(熵源获取可能阻塞),非安全场景不建议使用。
  • 使用示例
    import java.security.SecureRandom;public class SecureRandomExample {public static void main(String[] args) {SecureRandom secureRandom = new SecureRandom();// 生成随机字节数组(常用于加密密钥)byte[] key = new byte[16];secureRandom.nextBytes(key);// 生成 [0, 100) 之间的安全整数int secureInt = secureRandom.nextInt(100);}
    }
    

4. Java 8+ 流式处理:Random 结合流

  • 适合批量生成随机数(如生成随机列表):
    import java.util.Random;
    import java.util.stream.IntStream;public class RandomStreamExample {public static void main(String[] args) {// 生成10个 [0, 100) 的随机整数并打印new Random().ints(10, 0, 100).forEach(System.out::println);}
    }
    

关键总结

  • 普通业务(多线程):优先用 ThreadLocalRandom(性能+线程安全最佳)。
  • 单线程简单场景Random 足够用。
  • 安全相关场景:必须用 SecureRandom(牺牲性能换安全性)。
  • 避免使用 Math.random()(本质是 Random 的静态实例,多线程下性能差,已被 ThreadLocalRandom 替代)。

根据场景选择即可,无需过度设计,但安全场景必须使用 SecureRandom 避免风险。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/962638.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GPIO 也是一个接口,还有 QEMU GPIODEV 和 GUSE - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

CF1327F AND Segments

经典问题。 首先拆位,那么限制变成强制一段全为 \(1\),或者强制一段存在 \(0\),先把第一个限制填完,再考虑第二个限制。 然后对于第二个条件,将包含关系给干掉,那么按照 \(l\) 排序后 \(r\) 也是递增的,考虑容斥…

Air780EPM系列低功耗模组USB设计进阶:硬件要点与LuatOS API开发赋能

本文将以Air780EPM系列低功耗模组为对象,探讨USB接口硬件设计的关键要点,并介绍LuatOS高效开发API的赋能作用。旨在帮助开发者避开常见设计误区,快速实现稳定可靠的USB应用开发目标。 在设计USB接口时,不少刚接触嵌…

如何项目管理软件中计算预算?

项目管理的过程中,我们需要考录很多方面因为许多公司为他们的客户创建项目。所以他们需要有项目报表,工时报表,也需要计算项目预算。按照工时计算预算才可以为客户请求钱。 Zoho Projects 中,计算预算很简单。这个…

Kimi会员双11砍价成功!0.99元首月链接分享

活动时间:2025.11.11-11.25(仅剩14天) 已砍成功的0.99元优惠链接,首月体验Kimi Andante会员: 👉 0.99元优惠购买链接 https://www.kimi.com/membership/pricing?from=d11_2025_bargain&track_id=19a7249d-…

实用指南:【Qt】9.信号和槽_信号和槽存在的意义

实用指南:【Qt】9.信号和槽_信号和槽存在的意义pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", …

DI依赖注入

依赖注入(Dependency Injection) 依赖注入(DI)是控制反转(IoC)的一种实现方式,核心思想是:将类所依赖的对象通过外部注入,而非类内部自行创建,从而降低类之间的耦合度。简单来说,就是“给某个类中的属性赋值…

解码LVGL定时器

定时器核心概念LVGL 定时器是按指定毫秒(ms)周期执行回调函数的机制,依赖内置计时器系统调度 非抢占式:多个定时器不会互相中断,一个定时器的回调执行完,才会执行下一个,因此回调中可安全调用 LVGL 相关函数或普…

ORACLE解析游标生成JSON

ORACLE解析游标生成JSON 1. 背景 存储过程中使用oracleutl_http调用rest接口,并以JSON的方式传输数据.此需求下,业务和环境有如下限制:业务已经通过sys_refcursor生成了业务数据,不希望重新编写存储过程 当前ORACLE版本…

习题解析之:鸡兔同笼

习题解析之:鸡兔同笼【问题描述】大约在1500年前,《孙子算经》中记载一个有趣的问题:今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?大概的意思是:有若干只鸡兔同在一个笼子里,从上面数,有35个头,从…

如何选择锡林郭勒西林瓶灌装旋盖机?环境温湿度要求详解

在制药、生物制剂及精细化工等行业中,西林瓶灌装机的稳定运行高度依赖于环境条件的精准控制。尤其在锡林郭勒等气候干燥、昼夜温差较大的地区,设备对温度与湿度的适应性成为用户选购时的重要考量因素。通常,西林瓶灌…

DeepSeek权威测评榜单2025年11月最新geo优化公司推荐

近年来,随着全球化进程加速,中国企业出海需求持续攀升,但在海外市场拓展中,geo 优化服务的质量参差不齐成为制约企业发展的关键痛点。据 2024 年《中国企业全球化报告》显示,超 72% 的出海企业因 geo 定位不准确、…

ECB33-PGB2N4E32-I单板机智能交通监控应用方案解析

一、方案概述与技术架构 1.1 系统整体架构设计 基于ECB33-PGB2N4E32-I的智能交通监控系统采用分层架构: 边缘感知层(前端设备): ├── 4K高清摄像头 4路 ├── 雷达测速传感器 2路 ├── 环境监测传感器(温湿…

北京GEO优化服务商2025权威推荐:抢占AI搜索流量新入口

技术驱动流量变革,选对服务商是制胜关键 在生成式AI重塑信息分发格局的今天,传统搜索引擎流量正以每年15%的速度向生成式引擎迁移。据行业数据显示,2025年全球GEO(生成式引擎优化)市场规模已突破120亿美元,35%的…

雅思报班哪个机构比较好?过来人分享选择经验与价格课程对比

雅思报班哪个机构比较好?过来人分享选择经验与价格课程对比Posted on 2025-11-11 18:14 打不死的小强996 阅读(0) 评论(0) 收藏 举报在选择雅思培训机构时,不少考生发现市面上课程质量参差不齐,教师资历难以核…

深入解析:第三方课题验收测试机构:【API测试工具Apifox使用指南】

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

云原生周刊丨runc 三大高危漏洞曝光

云原生热点 CNCF 宣布 Crossplane 毕业:迈入云原生智能控制平面新阶段 Crossplane 是一个开源的 Kubernetes 扩展,用 Kubernetes 的 API 来管理各云厂商的基础设施,把 K8s 变成“通用控制平面”。 近日,Crossplane…

Web Worker 入门指南

在浏览器环境中,JavaScript 是单线程运行的,这意味着当执行一些耗时的操作时(例如大量计算、数据处理等),会阻塞主线程,导致用户界面卡顿,影响用户体验。为了解决这个问题,Web Worker 提供了一种在后台线程中运…

鸿蒙NEXT系列之精析NDK UI API(节点增删和属性设置) - 实践

鸿蒙NEXT系列之精析NDK UI API(节点增删和属性设置) - 实践2025-11-11 18:04 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !import…

通用cursor rules总结

所有项目通用规则 命名:base.mdc点击查看代码 --- description: globs: alwaysApply: true --- # 核心开发原则## 通用开发原则 - **可测试性**:编写可测试的代码,组件应保持单一职责 - **DRY 原则**:避免重复代码…