Java 随机数生成器
通过交互式代码示例学习如何在 Java 中生成随机数。探索 Random.nextInt()、SecureRandom、ThreadLocalRandom 和 Math.random() 的详细用法。
需要快速生成随机数?
试试我们的在线随机数生成器,无需编写代码即可获得即时结果。
Java 代码编辑器
通过交互式代码示例学习如何在 Java 中生成随机数。探索 Random.nextInt()、SecureRandom、ThreadLocalRandom 和 Math.random() 的详细用法。
输出
模拟输出(Java 在服务器上运行)
点击"运行代码"查看示例输出
使用 java.util.Random 的基本随机数
使用 Random.nextInt() 生成指定范围内的随机整数。这是 Java 中通用随机数生成的最常用方法。
理解 Java 随机数生成
Java 提供了多种生成随机数的方法,每种都针对不同的用例进行了优化。java.util.Random 使用线性同余生成器(LCG)算法,SecureRandom 提供加密强度的随机数,ThreadLocalRandom 为并发应用提供线程安全的生成,Math.random() 提供生成随机 double 值的简单方法。
java.util.Random
java.util.Random 提供快速的伪随机数生成,适合模拟、游戏和通用编程任务。对于基本使用是线程安全的。
SecureRandom
java.security.SecureRandom 使用特定平台的算法(SHA1PRNG、NativePRNG)生成加密安全的随机数,用于安全应用。
ThreadLocalRandom
ThreadLocalRandom 专为多线程应用设计,提供高效的线程安全随机数生成,避免竞争和同步开销。
Math.random()
Math.random() 是一个简单的方法,返回 0.0 到 1.0 之间的 double 值。适合快速计算,但灵活性不如其他选项。
常见用例
游戏和模拟
在游戏循环中使用 Random.nextInt() 或 ThreadLocalRandom 生成随机骰子掷骰、抽卡、敌人生成和游戏事件。
安全和加密
使用 SecureRandom 创建安全密码、API 密钥、会话令牌和加密盐,以确保加密强度的随机性。
并发应用
在并行流和多线程应用中使用 ThreadLocalRandom 避免竞争并提高性能。
软件测试
创建随机测试数据、模糊测试输入和边缘情况,确保 Java 应用的健壮代码覆盖和错误检测。
Java 随机数生成如何工作
Java 的 java.util.Random 类使用线性同余生成器(LCG)算法和 48 位种子。它提供了一种生成伪随机数的简单方法,并且是线程同步的。
SecureRandom 类通过使用特定平台实现提供加密强度的随机数。在大多数系统上,它使用操作系统的熵源或硬件随机数生成器。
ThreadLocalRandom(Java 7 引入)专为多线程应用设计。它使用隔离到当前线程的随机数生成器,避免同步开销和竞争。
Java 随机数生成专家技巧
选择正确的 API
简单情况使用 Random,安全相关使用 SecureRandom,并发应用使用 ThreadLocalRandom,快速原型使用 Math.random()。每种都有特定的用例。
安全场景始终使用 SecureRandom
切勿使用 Random 或 Math.random() 生成密码、令牌或加密操作。始终使用 SecureRandom 确保强随机性并避免可预测模式。
优化并发访问
在多线程应用中,ThreadLocalRandom 比同步 Random 对象快得多。在并行流和并发集合中使用它。
技术规范
算法
- 线性同余生成器(Random 类)
- SHA1PRNG 或 NativePRNG(SecureRandom)
- ThreadLocalRandom(Java 7+,基于 Random)
- 伪随机 double(Math.random())
性能特征
- Math.random():简单 double 最快
- ThreadLocalRandom:并发访问最佳
- Random:通用良好,有同步开销
- SecureRandom:由于熵收集而较慢