JUC并发包提供了一系列的原子操作类,这些类都是使用非阻塞算法(CAS)实现的,相比于使用锁来实现,这些原子操作类在性能上更好一些。

  JUC并发包中包含有AtomicInteger、AtomicLong和AtomicBoolean等原子性操作类,它们的原理相似。

  这里以AtomicLong为例进行说明,AtomicLong是原子性递增或者递减类,它是使用Unsafe来实现的。

  AtomicLong通过CAS提供了非阻塞的原子性操作。

  其源码如下:

Java并发包中的原子变量操作类_第1张图片

Java并发包中的原子变量操作类_第2张图片

Java并发包中的原子变量操作类_第3张图片

Java并发包中的原子变量操作类_第4张图片

Java并发包中的原子变量操作类_第5张图片

  从源码中看出,AtomicLong的递增或递减方法都是通过调用Unsafe的getAndAddLong方法来实现操作。

  getAndAddLong方法是个原子性操作,在这里它的第一个参数是AtomicLong实例的引用,第二个参数是value变量在AtomicLong中的偏移量,第三个参数是要设置的第二个变量的值。

  使用AtomicLong的实例代码见thread20

  关于AtomicInteger和AtomicBoolean与AtomicLong原理类似,就不多说了。

  代码示例:

Java并发包中的原子变量操作类_第6张图片

Java并发包中的原子变量操作类_第7张图片