ThreadLocalRandom 更适合多线程高并发场景,因线程局部 seed 避免竞争;Random 适用于需可重现序列、正态分布等高级功能的单线程或测试场景。

Java 中 Random 和 ThreadLocalRandom 都用于生成伪随机数,但设计目标、线程安全机制和适用场景有本质区别。简单说:Random 是全局共享的线程不安全类,而 ThreadLocalRandom 是为多线程高并发场景优化的线程局部实例。
Random 使用一个共享的原子整数(seed)作为随机种子,每次调用 nextXXX() 方法前需通过 CAS 更新 seed,存在竞争开销;ThreadLocalRandom 则为每个线程维护独立的 seed 变量(存于线程本地存储),完全避免跨线程同步,因此无锁、无竞争。
Random 实例可被多个线程共享,但必须手动同步(如加 synchronized),否则结果不可预测或性能下降ThreadLocalRandom 不允许显式构造,只能通过 ThreadLocalRandom.current() 获取当前线程专属实例在高并发场景下,ThreadLocalRandom 的吞吐量通常比同步使用的 Random 高数倍甚至一个数量级。例如,在 100 线程并行调用 10 万次 nextInt() 的基准测试中,ThreadLocalRandom 常快 3–8 倍。
ThreadLocalRandom 仍略优(因省去 CAS 开销)ThreadLocalRandom 的 API 更精简:只提供 nextInt()、nextLong()、nextDouble() 及带范围的重载方法(如 nextInt(int bound)),不支持设置自定义 seed,也不提供 setSeed(long) 或 nextGaussian() 等高级方法。
立即学习“Java免费学习笔记(深入)”;
new ThreadLocalRandom() 创建实例——它没有公有构造器Random 并传入确定 seed不是“哪个更好”,而是“哪个更合适”:
ThreadLocalRandom.current()
new Random(12345L) 固定 seedThreadLocalRandom 保持一致性Random(或升级到 SecureRandom / 第三方库如 Apache Commons Math)以上就是Java中Random和ThreadLocalRandom有什么区别_随机数生成方式解析的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号