(17条消息) Java16个原子类介绍-基于JDK8_晏霖/胖虎的博客-CSDN博客_原子类
AtomicInteger.incrementAndGet():
incrementAndGet()方法在一个无限循环体内,不断尝试将一个比当前值大1的新值赋给自己,如果失败则说明在执行"获取-设置"操作的时已经被其它线程修改过了,于是便再次进入循环下一次操作,直到成功为止。
//自加1方法AtomicInteger.incrementAndGet()
public final int incrementAndGet() {
for (;;) {
int current = get();
int next = current + 1;
if (compareAndSet(current, next))
return next;
}
}
高并发情况下,LongAdder(累加器)比AtomicLong原子操作效率更高:
longAdder.increment();//自加1
把普通变量升级为原子变量,用AtomicIntegerFieldUpdater<T>类:
AtomicIntegerFieldUpdater<类名> atomicUpdater = AtomicIntegerFieldUpdater.newUpdater(类名.class, "某属性");
atomicUpdater.getAndIncrement(new 类名());//该类对象的某属性自加1