并发编程__原子变量

Posted 知行合一

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了并发编程__原子变量相关的知识,希望对你有一定的参考价值。

原子变量:

    在 java.util.concurrent.atomic 包下提供了一些原子变量。 


     1. volatile 保证内存可见性
     2. CAS(Compare-And-Swap) 算法保证数据变量的原子性
     CAS 算法是硬件对于并发操作的支持
     CAS 包含了三个操作数:
     ①内存值 V
     ②预估值 A
     ③更新值 B
     当且仅当 V == A 时, V = B; 否则,不会执行任何操作。

个人理解

    每个线程的操作 分为两步,先读取内存值,再进行比较和替换,只有比较之后相等,才进行替换
    因此当多个线程进行访问时,只有一个线程会成功改写
    当多个线程对主程序中的数据进行修改时,有且只有一个线程会成功,效率比原来的锁高,
    当这一次运算不成功的时候,下一次不会阻塞,不会放弃cpu给他的执行权,
    他紧接着会再去尝试,再去更新
    所以CAS算法,要比普通的同步锁的效率要高
    缺点:是自己写的算法比较多,比如一旦失败了, 我们要怎么做,通常用循环,
    一旦失败了再来,失败了再来,什么时候成功,什么时候为止。

以上是关于并发编程__原子变量的主要内容,如果未能解决你的问题,请参考以下文章

Java Review - 并发编程_原子操作类原理剖析

Java Review - 并发编程_前置知识二

Java Review - 并发编程_原子操作类LongAdder & LongAccumulator剖析

提升--05---并发编程之---原子性---CAS

Java并发编程实战(chapter_1)原子性

Java Review - 并发编程_JDK 8新增的原子操作类LongAdder & LongAccumulator