美文网首页
CAS在Java中的广泛应用

CAS在Java中的广泛应用

作者: 改大人alden | 来源:发表于2019-04-17 23:10 被阅读0次

    上篇文章中我们提到了悲观锁和乐观锁,我们知道乐观锁的一种实现方式就是CAS算法。但CAS在Java中的应用远不止于此。

    首先我们了解下CAS的概念:它是一种通过对比预期值的方式保证同步的思想,比如一个变量的值是V1,当我要修改这个变量时,我会先将它目前的值和V1比较,若相等则修改,若不相等则重试一定次数。

    下面介绍一部分CAS在Java中的应用:

    1.AtomicInteger等原子类的线程安全

    2.JDK1.8中ConcurrentHashMap的线程安全(更新size时使用)

    3.ReenTrantLock中更改锁状态

    4.创建对象的内存分配线程安全性

    后续文章会详细介绍上面的每一种应用实现。

    但CAS也有它的缺陷:

    1.可能产生ABA的问题

    接着上面的例子,变量值为V1,有可能是变成V2后又变回了V1,这在CAS看来是未曾改变过。这个缺陷可以结合版本号( AtomicStampedReference)来解决。

    2.循环时长开销比较大

    重试次数过大导致的资源浪费

    相关文章

      网友评论

          本文标题:CAS在Java中的广泛应用

          本文链接:https://www.haomeiwen.com/subject/kecawqtx.html