Java 21 引入 RandomGeneratorFactory 统一管理随机数生成器,通过标准算法名(如"LXM")获取工厂并创建实例,支持种子初始化和多种数值生成,但需注意算法可用性、大小写敏感及 SecureRandom 的特殊实现机制。

Java 21 引入了 RandomGeneratorFactory,用于统一管理和创建符合特定算法的随机数生成器(如 Xoroshiro128PlusPlus、LXM、SecureRandom 等)。它不再依赖字符串硬编码,而是通过标准算法名称获取工厂,再生成实例。
使用标准算法名称获取工厂
Java 定义了一组标准化的算法名称(见 JDK 文档),例如:"LXM"、"Xoroshiro128PlusPlus"、"SecureRandom"、"SplittableRandom"。调用 RandomGeneratorFactory.of(name) 即可获取对应工厂:
-
RandomGeneratorFactory.of("LXM")→ 返回支持 LXM 系列算法的工厂(如LXM64StarStarRandom) -
RandomGeneratorFactory.of("Xoroshiro128PlusPlus")→ 返回该具体实现的工厂 -
RandomGeneratorFactory.of("SecureRandom")→ 返回默认安全随机工厂(底层可能为SHA1PRNG或DRBG,取决于平台)
检查算法是否可用
不是所有名称都一定存在,尤其在不同 JVM 实现或安全策略下。建议先用 RandomGeneratorFactory.all() 获取全部已注册工厂,再筛选:
-
RandomGeneratorFactory.all().map(f -> f.name()).toList()可列出所有支持的名称 - 若
of("XXX")抛出IllegalArgumentException,说明该名称未注册或拼写错误 - 注意大小写敏感:必须严格匹配,如
"xoshiro256plusplus"❌,正确是"Xoshiro256PlusPlus"
创建并使用随机数生成器实例
拿到工厂后,调用 create() 即可获得随机数生成器对象:
立即学习“Java免费学习笔记(深入)”;
RandomGenerator rg = RandomGeneratorFactory.of("LXM").create();- 也可传入种子:
RandomGeneratorFactory.of("Xoroshiro128PlusPlus").create(12345L) - 生成整数:
rg.nextInt(100);生成双精度浮点:rg.nextDouble()
注意 SecureRandom 的特殊性
"SecureRandom" 是一个抽象名称,其实际实现由 Security.getProviders() 和系统属性决定。它不保证返回同一类型实例,且 create() 可能抛出 SecurityException(受限环境)。生产中涉及密码学场景,建议显式指定算法(如 "SHA1PRNG")并用 SecureRandom.getInstance(alg, provider) 更可控。


















