笔者所在公司生产环境用的JDK版本是1.6 , 最近打算公司打算在新的业务系统里面应用JDK1.8,注意到JDK1.8较JDK1.6的一些改动。
1、AtomicLong的getAndSet、getAndIncrement、getAndDecrement、getAndAdd、incrementAndGet、decrementAndGet、addAndGet等方法的实现:
JDK1.6的incrementAndGet方法:
public final long incrementAndGet() {
for (;;) {
long current = get();
long next = current + 1;
if (compareAndSet(current, next))
return next;
}
}
而JDK1.8的incrementAndGet方法则为:
public final long incrementAndGet() {
return unsafe.getAndAddLong(this, valueOffset, 1L) + 1L;
}