Random 高并发下的缺点(美团面试题) 替代方案JUC下的 ThreadLocalRandom

本文深入探讨了Java中Random类在高并发环境下的性能问题,指出其大量使用CAS导致的CPU资源消耗。文章通过源码分析解释了Random的内部工作机制,并提出ThreadLocalRandom作为解决方案,解释了ThreadLocalRandom如何避免并发竞争,提高效率。总结了在并发编程中选择合适随机数生成器的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Random 高并发下的缺点

  • Random是线程安全的,但是并不是“高并发”的
  • 大量CAS导致CPU飙高
 Random random = new Random();
 System.out.println(random.nextInt(100));

一、奇怪的命名

  • random.nextInt() 奇怪的命名,获取值为什么不是通常的 “get”, “create”,“generate”等常见的命名.random生成的随机数,并不是真正的随机,它有一个种子的概念,是根据种子值来计算【下一个】值的,如果种子值相同,那么它生成出来的随机数也必定相等,也就是“确定的输入产生确定的输出”。
    在这里插入图片描述
    二、源码解析
public int nextInt(int bound) {
   
   
    if (bound <= 0)
        throw new IllegalArgumentException(BadBound);

	// 1.根据老的种子生成新的种子
    int r = next(31);
    // 2.根据新的种子计算随机数
    int m = bound - 1;
    if ((bound & m) == 0)  // i.e., bound is a power of 2
        r = (int)((bound * (long)r) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值