AtomicInteger的原理是什么?
一句话概括:使用CAS实现。
在AtomicInteger中,CAS操作的流程如下:
- 调用 incrementAndGet()方法,该方法会通过调用unsafe.getAndAddInt()方法,获取当前 AtomicInteger对象的值val
- 将 val + 1 得到新的值 next
- 使用 unsafe.compareAndSwapInt() 方法进行 CAS 操作,将对象中当前值与预期值(步骤1中获取的val)进行比较,如果相等,则将 next赋值给val;否则返回 false
- 如果CAS操作返回false,说明有其他线程已经修改了AtomicInteger对象的值,需要重新执行步骤 1
总结:
在 CAS 操作中,由于只有一个线程可以成功修改共享变量的值,因此可以保证操作的原子性,即多线程同时修改AtomicInteger变量时也不会出现竞态条件。这样就可以在多线程环境下安全地对AtomicInteger进行整型变量操作。其它的原子操作类基本都是大同小异。