incrementAndGet()
/**
* Atomically increments by one the current value.
*
* @return the updated value
*/
public final int incrementAndGet() {
return unsafe.getAndAddInt(this, valueOffset, 1) + 1;
}
public final int getAndAddInt(Object var1, long var2, int var4) {
int var5;
do {
var5 = this.getIntVolatile(var1, var2);
} while(!this.compareAndSwapInt(var1, var2, var5, var5 + var4));
return var5;
}
getAndIncrement()
/**
* Atomically increments by one the current value.
*
* @return the previous value
*/
public final int getAndIncrement() {
return unsafe.getAndAddInt(this, valueOffset, 1);
}
通过源码分析可知,incrementAndGet()和 getAndIncrement ()都调用了 Unsafe 类中的 getAndAddInt() 方法,区别是:
① 前者,先+1,再返回
② 后者,先返回,再 +1
参考资料:
1、JDK 源码
2、AtomicInteger 中 incrementAndGet与getAndIncrement 两个方法的区别
https://blog.csdn.net/scmrpu/article/details/50819345

本文详细解析了AtomicInteger类中的incrementAndGet与getAndIncrement两个核心方法的区别。通过对源码的深入分析,阐述了这两个方法如何实现原子性的加一操作,并解释了它们在返回值上的不同之处。
493

被折叠的 条评论
为什么被折叠?



