Java高级技术第五章——高并发之AtomXXX系列

前言

前言点击此处查看:
http://blog.csdn.net/wang7807564/article/details/79113195

AtomXXX类

该类封装在java.util.concurrent.atomic包中,包中包括了AtomicInteger,Atomicboolean,AtomicIntegerArray等等类型。
这为我们提供了解决同样的加锁的问题的更高效的方法,使用AtomXXX类。AtomXXX类本身方法都是原子性的,但不能保证多个方法连续调用是原子性的。
也就是说,单个的方法都是具有原子性的(例如自增)。但是,他们的间隙是可以插入的,也就是说,整体仍然是不具有原子性的,仍然需要加锁来保证整个代码块的原子性。
例如,我们在实例化一个名为count的变量时:

AtomicInteger count = new AtomicInteger(0);

对于常规的int类型,count++自然是不具有原子性的。由于JAVA没有符号重载,使用一个方法来实现原子自增:

count.incrementAndGet(); //count++

CAS理念

值得一提的是,Java的AtomXXX类并不是使用了锁的方式进行同步,而是采用了一种新的理念,叫做CAS.
CAS是一组原语指令,用来实现多线程下的变量同步。在 x86 下的指令CMPXCHG实现了CAS,前置LOCK既可以达到原子性操作。
由于CAS原语的直接操作与计算机底层的联系很大,CAS原语有三个参数,内存地址,期望值,新值。我们在Java中一般不去直接写CAS相关的代码,JDK为我们封装在AtomXXX中,因此,我们直接使用就可以了。
有关CAS的实现原理大家可以查阅相关资料,在此只需要知道是一种无锁的并行编程方式即可,其他不做赘述。

猜你喜欢

转载自blog.csdn.net/wang7807564/article/details/80008751