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:由于熵收集而较慢