CAS在Java中的广泛应用

2019-04-17  本文已影响0人  改大人alden

上篇文章中我们提到了悲观锁和乐观锁,我们知道乐观锁的一种实现方式就是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.循环时长开销比较大

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

上一篇 下一篇

猜你喜欢

热点阅读