AtomicLong中的incrementAndGet方法线程安全的么

新手上路,请多包涵

public final long incrementAndGet() {

return unsafe.getAndAddLong(this, valueOffset, 1L) + 1L;

}
AtomicLong源码中的incrementAndGet方,unsafe.getAndAddLong(this, valueOffset, 1L)方法我清楚是线程安全的,但是在+1之后不又是线程不安全了么。这点不是很清楚,请大佬讲解。这个是看java并发编程之美遇到的问题

阅读 3.3k
3 个回答
但是在+1之后不又是线程不安全了么

这里的 +1 为什么线程不安全?

因为getAndAddLon返回的long只有当前线程读写

public final long incrementAndGet() {
long v = unsafe.getAndAddLong(this, valueOffset, 1L); //线程安全
long r = v + 1L; //线程安全
return r;
}

unsafe.getAndAddLong(this, valueOffset, 1L)是线程安全的,他做的事已经把公共对象的值+1了,只不过他返回的是+1前的值,所以外边需要再+1,而外边这个只是给当前线程自己看的,不会改变公共对象的值

推荐问题