代码对比
✕ Java 8
// Hard-coded to one algorithm
Random rng = new Random();
int value = rng.nextInt(100);
// Or thread-local, but still locked in
int value = ThreadLocalRandom.current()
.nextInt(100);
✓ Java 17+
// Algorithm-agnostic via factory
var rng = RandomGenerator.of("L64X128MixRandom");
int value = rng.nextInt(100);
// Or get a splittable generator
var rng = RandomGeneratorFactory
.of("L64X128MixRandom").create();
发现此代码有问题? 告诉我们。
为什么现代方式更好
算法无关
按名称选择最佳 RNG 算法,无需更改代码结构。
统一接口
所有随机数生成器共享相同的接口。
更好的算法
访问 L64X128MixRandom 等现代高质量 PRNG。
旧方式
new Random() / ThreadLocalRandom
现代方式
RandomGenerator 工厂
自 JDK
17
难度
中级
JDK 支持
RandomGenerator 接口
可用
自 JDK 17 起可用(2021 年 9 月,JEP 356)。
工作原理
JDK 17 引入 RandomGenerator 作为所有 RNG 实现的通用接口。通过名称选择算法,可以轻松切换实现而无需更改代码结构。
相关文档