private volatile int value;
这里的valueOffset 指的是value值相对于AtomicInteger对象首地址的在内存中偏移量,根据这个地址可以准确的定位value的值。volatile 可以保证不同线程下的内存可见性,
getAndIncrement的操作相当于一个乐观锁,每次进行i++操作前先获取到原来的value值,最终进行改变数据时,比较当前所持有的value值和原来的value值current 是否一致,如果一致会进行修改值的操作。不一致的情况下会循环调用进行比较(随之带来的就是性能问题,会一直进行死循环,直到修改完value中的值)
public final boolean compareAndSet(int expect, int update) {
主要传入当前的值this 和valueOfferset,这样可以定位到原本的value值,和excepte进行比较,如果线程不安全,就返回false.如果线程安全,将update的值赋给value.
文章来源: 关于jdk中的AtomicInteger的操作