黑土的腿法:风云变幻,一招制敌的传奇

核心内容摘要

粉色晶体:穿越光影的奇幻之旅
六月纸箱厂女厕“小清新”,从源头扼杀“水漫金山”

胸片2026:预见未来的健康之钥

Java 中随机数生成零基础入门到精通

最新实用指南Java 提供了多种生成随机数的方式从最古老的java.util.Random到现代推荐的java.util.concurrent.ThreadLocalRandom再到加密级别的SecureRandom每一种都有自己的适用场景。

下面按“使用频率 推荐程度”排序带你从入门用到精通。

目前

最推荐的几种方式对比方式类名线程安全性能适用场景推荐指数备注ThreadLocalRandomjava.util.concurrent.ThreadLocalRandom是每个线程独立★★★★★99% 的业务场景游戏、模拟、抽奖、测试数据★★★★★现代首选Randomjava.util.Random否有锁★★★单线程或对性能要求不高★★★历史遗留代码常见SplittableRandomjava.util.SplittableRandom是★★★★并行流 大规模随机数生成★★★★Java 8 引入适合 Stream 并行SecureRandomjava.security.SecureRandom是★★密码学、安全相关token、盐、nonce★★★唯一加密安全随机数生成器Math.random()java.lang.Math否内部用 Random★★★非常简单的脚本/教学场景★★不推荐在正式项目中使用

代码示例 – 各种场景最推荐写法直接复制用方式一ThreadLocalRandom99% 场景首选importjava.util.concurrent.ThreadLocalRandom;//

随机整数 [0, n)intnumThreadLocalRandom.current().nextInt(

;// 0 ~ 99//

指定范围 [min, max)intscoreThreadLocalRandom.current().nextInt(60,

;// 60 ~ 100//

随机 longlongbigNumThreadLocalRandom.current().nextLong();//

随机 double [

0,

1.

doubledThreadLocalRandom.current().nextDouble();//

随机 booleanbooleancoinThreadLocalRandom.current().nextBoolean();//

随机 float [

0f,

0f)floatfThreadLocalRandom.current().nextFloat();//

高斯分布正态分布- 常用于模拟身高、体重、考试分数doubleheightThreadLocalRandom.current().nextGaussian()*10170;// 均值170cm标准差10方式二经典 Random老项目常见importjava.util.Random;RandomrandnewRandom();// 建议只创建一个实例不要每次都 new// 基本用法同上只是把 ThreadLocalRandom.current() 换成 randintnrand.nextInt(

;doubledrand.nextDouble();重要不要在循环里反复new Random()会产生大量重复或低质量随机数。

方式三SecureRandom安全敏感场景importjava.security.SecureRandom;importjava.util.Base64;SecureRandomsrnewSecureRandom();// 生成 32 字节随机盐密码哈希常用byte[]saltnewbyte[32];sr.nextBytes(salt);// 转 base64 常用于 tokenStringtokenBase

getUrlEncoder().withoutPadding().encodeToString(salt);常见写法对比记住这个就够了// 错误示范低质量 性能差for(inti0;i10000;i){newRandom().nextInt(

;// 千万别这样写}// 推荐示范ThreadLocalRandom.current().nextInt(

;// 简洁、安全、高性能

常见需求一站式解决方案你想要的效果推荐写法

说明随机整数 [min, max]ThreadLocalRandom.current().nextInt(min, max

注意要 1从 List/Set 随机取一个元素list.get(ThreadLocalRandom.current().nextInt(list.size()))最简洁按权重随机抽奖、掉落用 Alias Method 或自己写累加权重 二分查找或用第三方库ThreadLocalRandom.nextDouble() 判断区间随机打乱数组/ListCollections.shuffle(list, ThreadLocalRandom.current())线程安全版生成随机字符串验证码、盐用SecureRandom Base64 或自定义字符集安全场景必用 SecureRandom模拟高斯分布考试成绩、身高ThreadLocalRandom.current().nextGaussian() * 标准差 均值非常常用并行流中生成随机数SplittableRandom或ThreadLocalRandom后者更简单避免锁竞争

经典面试/源码追问为什么不推荐反复 new Random()→ 种子如果太接近纳秒级随机序列高度重复而且有锁性能差。

ThreadLocalRandom 为什么比 Random 快很多→ 每个线程有独立的随机数种子和状态无锁竞争。

Math.random() 底层是什么→new Random().nextDouble()的封装单例 Random不推荐在高并发使用。

如何生成不重复的随机数比如随机抽 10 张不重复的牌→ 首选Collections.shuffle整个集合后取前 n 个→ 次选用 Set 循环生成直到达到数量效率较低生成 6 位数字验证码最推荐写法StringcodeString.format(%06d,ThreadLocalRandom.current().nextInt(

);

快速记忆口诀背下来就够了普通业务随机数 →ThreadLocalRandom.current().nextXxx()最常用安全相关密码、token、盐 →SecureRandom并行流 / 大数据量 →SplittableRandom或ThreadLocalRandom老项目/简单脚本 →Random或Math.random()永远不要在循环里 new Random()你现在最常遇到的随机数场景是哪一种游戏掉落/抽奖测试数据生成验证码/唯一码按权重随机高并发场景告诉我具体需求我可以给你最优写法或完整小例子。

9.1无需安装点击进入-9.1无需安装点击进入应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123