文章目录
在多线程并发当中,要保证线程的原子性。
原子类的原子性是通过 volatile + CAS 来实现原子操作的。
概念
CAS(Compare And Swap)是指比较并交换。CAS算法 CAS(V,E,N)包含有3参数,V 表示要更新的变量,E 表示预期的值,N 表示新值。
在且仅在 V 值等于 E 值时,才会将 V 值设为 N, 如果V 值和E 值不同,则说明已经有其他线程做了更新,当前线程什么都不做。最后,CAS返回当前 V 的真实值。
这种做法的效率是高于加锁的,当 V 和E 判断不一样的时候,也就不更新值,也不会发送阻塞,继续获得CPU的执行权,继续判断并执行。

CAS的特性:乐观锁
CAS 的操作采用的了乐观锁的思想,总是认为自己是可以成功完成操作的。在有多个线程可以同时使用 CAS 操作一个变量时,只有一个会胜出并成功更新,其余均会失败。
失败的线程是不会挂起的,仅仅是被允许再次尝试,当然,也允许失败的线程放弃操作的。 基于这样的原理,CAS 操作即使没有锁,也可以发现其他线程对当前线程的干扰,并进行恰当的处理。
CAS的自旋等待
在 JDK

本文深入探讨了Java并发中的CAS(CompareAndSwap)算法,它基于乐观锁思想实现线程间的原子性操作。CAS通过比较并交换值来确保数据的正确性,避免了线程阻塞带来的开销。然而,CAS存在ABA问题,即在某个值从A变为B再变回A的过程中,可能会导致数据一致性问题。为解决此问题,通常引入版本号机制。此外,文章还讨论了CAS的自旋等待策略,以及在高并发场景下可能导致的CPU资源浪费。
最低0.47元/天 解锁文章
8043

被折叠的 条评论
为什么被折叠?



