java - LongAdder 是 ID 生成器的错误选择吗?
问题描述
Java 的LongAdder
性能更高AtomicLong
。但是,如果我正确理解了这一点,那么它对于 ID 生成器来说不是一个好的选择,因为没有原子的“读取和递增”操作。
我问这个是因为我看到人们推荐它用于 ID 生成,我没有看到这一点,因为sum()
每次操作都会调用它。
简单的长 ID 生成器是LongAdder
好还是坏的选择?
解决方案
我想你已经回答了你自己的问题。从单线程生成 id 绝对是矫枉过正,并且在多线程场景中不可用,因为没有类似原子incrementAndGet
的操作。所以答案必须是这不是一个好的选择。
正如 javadoc 所说,这个类对于收集统计信息等可能很高的争用很有用:
当多个线程更新用于收集统计信息等目的的公共总和时,此类通常更可取
AtomicLong
,而不是用于细粒度的同步控制。
推荐阅读
- authentication - 微服务 - 管理外部系统授权令牌
- qemu - 为什么我的 cpu 似乎失去了解码能力
- php - 如何配置 Yii2 只接受 application/json & application/xml 请求?(撤销/禁止表单数据)
- python - 矩阵 - 运算符 + 方法中的重载
- codeigniter-4 - 如何将数组作为连接表返回
- python - 我在 python 代码中的 For 循环中犯了错误吗?模型精度太高,请仔细检查
- java - 从外部浏览器调用时的 HttpServletResponse 输出目标
- docker - 使用 docker 驱动程序在 minikube 中 Docker 本地私有注册表
- python - 为什么我的注册和登录系统在 python 中循环?
- java - 通过 WildFly 中的负载均衡器向 HornetQ 发送消息