Java 多线程

总结

AtomicLong

AtomicLong 是基于 CAS 方式自旋更新的。

唯一会制约AtomicLong高效的原因是高并发,高并发意味着CAS的失败几率更高, 重试次数更多,越多线程重试,CAS失败几率又越高,变成恶性循环,AtomicLong效率降低。

LongAdder

LongAdder 是把 value 分成若干cell。

  • 并发量低的时候,直接 CAS 更新值,成功即结束。
  • 并发量高的情况,CAS更新某个cell值和需要时对cell数据扩容,成功结束;更新失败自旋 CAS 更新 cell值。
  • 取值的时候,调用 sum() 方法进行每个cell累加。

参考

LongAdder原理解析: https://www.jianshu.com/p/b3c5b05055de

LongAdder和AtomicLong性能对比

原文地址:https://www.cnblogs.com/frankcui/p/13700467.html