Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >java-jdk

java-jdk

作者头像
知识浅谈
发布于 2021-10-25 03:45:23
发布于 2021-10-25 03:45:23
3410
举报
文章被收录于专栏:分享学习分享学习

Java后端面试知识点汇总✈

为了不侵犯作者版权,选择了转载,我补充了很多自己的理解。

JDK目录

JDK&JRE

Java运行时环境(JRE)是将要执行Java程序的Java虚拟机。它同时也包含了执行applet需要的浏览器插件。Java开发工具包(JDK)是完整的Java软件开发包,包含了JRE,编译器和其他的工具(比如:JavaDoc,Java调试器),可以让开发者开发、编译、执行Java应用程序。

Java中的LongAdder和AtomicLong有什么区别

不理解的回答:JDK1.8引入了LongAdder类。CAS机制就是,在一个死循环内,不断尝试修改目标值,直到修改成功。如果竞争不激烈,那么修改成功的概率就很高,否则,修改失败的的概率就很高,在大量修改失败时,这些原子操作就会进行多次循环尝试,因此性能就会受到影响。 结合ConcurrentHashMap的实现思想,应该可以想到对一种传统AtomicInteger等原子类的改进思路。虽然CAS操作没有锁,但是像减少粒度这种分离热点的思想依然可以使用。将AtomicInteger的内部核心数据value分离成一个数组,每个线程访问时,通过哈希等算法映射到其中一个数字进行计数,而最终的计数结果,则为这个数组的求和累加。热点数据value被分离成多个单元cell,每个cell独自维护内部的值,当前对象的实际值由所有的cell累计合成,这样热点就进行了有效的分离,提高了并行度。

通俗的回答:简单回答:AtomicLong是CAS操作。LongAdder是多个单元操作。

  1. AtomicLong 是基于 CAS 方式自旋更新的;LongAdder 是把 value 分成若干cell,并发量低的时候,直接 CAS 更新值,成功即结束。并发量高的情况,CAS更新某个cell值和需要时对cell数据扩容,成功结束;更新失败自旋 CAS 更新 cell值。取值的时候,调用 sum() 方法进行每个cell累加。
  2. AtomicLong 包含有原子性的读、写结合的api;LongAdder 没有原子性的读、写结合的api,能保证结果最终一致性。 低并发场景AtomicLong 和 LongAdder 性能相似,高并发场景 LongAdder 性能优于 AtomicLong。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/10/20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
并发设计模式实战系列(14):CAS(无锁编程)
今天为大家带来的是并发设计模式实战系列,第十四章CAS(无锁编程),废话不多说直接开始~
摘星.
2025/05/20
1190
突击并发编程JUC系列-​JDK1.8 扩展类型 LongAdder
小伙伴们,大家好,我们又见面了,突击并发编程JUC系列实战JDK1.8 扩展类型马上就要发车了。
山间木匠
2020/09/27
3870
突击并发编程JUC系列-​JDK1.8 扩展类型 LongAdder
AtomicXXX 用的好好的,阿里为什么推荐使用 LongAdder?面试必问!
点击关注公众号,Java干货及时送达 面试连环炮 先来一连炮简单的面试,看你能顶住几轮? ---- 栈长: 1、多线程情况下,进行数字累加(count++)要注意什么? 张三: 要注意给累加方法加同步锁,不然会出现变量可见性问题,变量值被其他线程覆盖出现不一致的情况 栈长: 2、保证变量可见性,用 volatile 修饰不就行了吗? 张三: volatile 是可以保证可见性,但不能保证原子性和线程安全 栈长: 3、除了加同步锁这种方案,还有别的方法吗? 张三: 还可以用 JDK 中的原子类,比如:Ato
Java技术栈
2022/03/08
2590
比AtomicLong更优秀的LongAdder确定不来了解一下吗?
文章中所有高清无码图片在公众号号回复: 图片666 即可查阅, 可直接关注公众号:壹枝花算不算浪漫
一枝花算不算浪漫
2020/05/15
1.1K0
JDK8中新增原子性操作类LongAdder
LongAdder类似于AtomicLong是原子性递增或者递减类,AtomicLong已经通过CAS提供了非阻塞的原子性操作,相比使用阻塞算法的同步器来说性能已经很好了,但是JDK开发组并不满足,因为在非常高的并发请求下AtomicLong的性能不能让他们接受,虽然AtomicLong使用CAS但是CAS失败后还是通过无限循环的自旋锁不断尝试的
加多
2018/09/06
2420
JDK8中新增原子性操作类LongAdder
Java并发编程系列-(9) JDK 8/9/10中的并发
CompletableFuture是JDK 8中引入的工具类,实现了Future接口,对以往的FutureTask的功能进行了增强。
码老思
2023/10/19
2460
Java并发编程系列-(9) JDK 8/9/10中的并发
Java线程安全如何进行原子操作,一致性的最佳实践
1.它可以延迟流水线执行指令(de-pipeline),使CPU不会消耗过多的执行资源,延迟的时间取决于具体实现的版本,在一些处理器上延迟时间是零。 2.它可以避免在退出循环的时候因内存顺序冲突(Memory Order Violation)而引起CPU流水线被清空(CPU Pipeline Flush),从而提高CPU的执行效率。
IT架构圈
2020/07/21
6970
Java线程安全如何进行原子操作,一致性的最佳实践
线程安全之原子性Atomic(AtomicInteger|LongAdder|AtomicLong)
线程安全性 当多线程访问某个类时,不管运行环境采用何种调度方式或者这些进程将如何交替执行,并且在主调代码中不需要任何的同步或者协同,这个类都能表现出正确的行为,那么这个类就是线程安全的. 原子性 提供互斥访问,同一时刻只有一个线程对它进行访问. Atomic包 位于java.util.concurrent.atomic,AtomicXXX : CAS、Unsafe.compareAndSwapXXX CAS(Compare and swap)比较和替换是设计并发算法用的的一项技术,比较和替换是用一个期望值和
开源日记
2021/01/09
8910
并发编程-03线程安全性之原子性(Atomic包)及原理分析
并发编程-06线程安全性之可见性 (synchronized + volatile)
小小工匠
2021/08/17
3880
并发编程原理剖析——Java并发包中原子操作类原理剖析
代码(1)通过Unsafe。getUnsafe()方法获取到Unsafe类的实例,因为AtomicLong类也是在rt.jar包下的,AtomicLong类就是通过BootStrap类加载器加载的。
须臾之余
2019/07/10
5410
并发编程原理剖析——Java并发包中原子操作类原理剖析
还在用Synchronized?Atomic你了解不?
之前在学习的时候也看过AtomicInteger类很多次了,一直没有去做相关的笔记。现在遇到问题了,于是就过来写写笔记,并希望在学习的过程中解决掉问题。
Java3y
2018/12/18
6350
还在用Synchronized?Atomic你了解不?
Java8原子弹类之LongAdder源码分析
JDK 8开始,针对Long型的原子操作, Java又提供了LongAdder. LongAccumulator; 针对Double类型,Java提供了DoubleAdder、DoubleAccumulator。
JavaEdge
2022/01/25
3420
Java8原子弹类之LongAdder源码分析
Java Review - 并发编程_JDK 8新增的原子操作类LongAdder & LongAccumulator
Java Review - 并发编程_原子操作类原理剖析中提到了 AtomicLong通过CAS提供了非阻塞的原子性操作,相比使用阻塞算法的同步器来说它的性能已经很好了,但是JDK开发组并不满足于此。使用AtomicLong时,在高并发下大量线程会同时去竞争更新同一个原子变量,但是由于同时只有一个线程的CAS操作会成功,这就造成了大量线程竞争失败后,会通过无限循环不断进行自旋尝试CAS的操作,而这会白白浪费CPU资源。
小小工匠
2021/12/01
2710
Java Review - 并发编程_JDK 8新增的原子操作类LongAdder & LongAccumulator
阿里巴巴写进Java开发手册里推荐的JUC工具类:LongAdder,确定不点进来学一下嘛?
昨天又从朋友那里倒腾过来一个好的题材:“JUC中的高性能计数器工具类LongAdder”。初步在网上搜索之后,发现其实阿里巴巴的Java开发手册中也有对于这个工具包的推荐:
程序员牛肉
2025/02/04
930
阿里巴巴写进Java开发手册里推荐的JUC工具类:LongAdder,确定不点进来学一下嘛?
Java16个原子类介绍-基于JDK8
emmmm,在写文章前我也翻阅了好多资料和书籍,其实大家在对原子类方法的使用介绍基本都没问题,但是对于java中原子类的个数是五花八门,下面我就把自己都认知和书籍资料结合起来给大家简单都介绍下java中原子类的应用。
胖虎
2019/06/26
8450
Java16个原子类介绍-基于JDK8
多线程编程学习八(原子操作类).
Java 在 JDK 1.5 中提供了 java.util.concurrent.atomic 包,这个包中的原子操作类提供了一种用法简单、性能高效、线程安全地更新一个变量的方式。主要提供了四种类型的原子更新方式,分别是原子更新基本类型、原子更新数组、原子更新引用和原子更新属性。
JMCui
2019/09/09
3140
多线程编程学习八(原子操作类).
2020-10-18:java中LongAdder和AtomicLong有什么区别?
AtomicLong 是基于 CAS 方式自旋更新的;LongAdder 是把 value 分成若干cell,并发量低的时候,直接 CAS 更新值,成功即结束。并发量高的情况,CAS更新某个cell值和需要时对cell数据扩容,成功结束;更新失败自旋 CAS 更新 cell值。取值的时候,调用 sum() 方法进行每个cell累加。
福大大架构师每日一题
2020/10/18
4560
我从LongAdder中窥探到了高并发的秘籍,上面只写了两个字...
时间过的真是快,新的一周又开始了。那么,你比上周更博学了吗?先来一个简短的荒腔走板,给冰冷的技术文注入一丝色彩。
why技术
2020/06/23
4800
JUC并发—4.wait和notify以及Atomic原理
在多线程开发中,wait()和notify()/notifyAll()还是挺常见的。在分布式系统里经常会使用wait()和notifyAll()来进行线程通信,当某个线程处于阻塞等待状态时,其他线程可以进行通知并唤醒它。
东阳马生架构
2025/04/23
470
吃透并发编程之—-Atomic原子类学习思考
发生冲突的情况会大大增加 (也就是存在大量更新时去比较预期的值发生了变化,导致此次更新失效的情况),因此效率会大大降低
Joseph_青椒
2023/09/07
2750
吃透并发编程之—-Atomic原子类学习思考
相关推荐
并发设计模式实战系列(14):CAS(无锁编程)
更多 >
LV.2
这个人很懒,什么都没有留下~
加入讨论
的问答专区 >
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档