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,而外边这个只是给当前线程自己看的,不会改变公共对象的值

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题