public final long incrementAndGet() {
return unsafe.getAndAddLong(this, valueOffset, 1L) + 1L;
}
AtomicLong源码中的incrementAndGet方,unsafe.getAndAddLong(this, valueOffset, 1L)方法我清楚是线程安全的,但是在+1之后不又是线程不安全了么。这点不是很清楚,请大佬讲解。这个是看java并发编程之美遇到的问题
public final long incrementAndGet() {
return unsafe.getAndAddLong(this, valueOffset, 1L) + 1L;
}
AtomicLong源码中的incrementAndGet方,unsafe.getAndAddLong(this, valueOffset, 1L)方法我清楚是线程安全的,但是在+1之后不又是线程不安全了么。这点不是很清楚,请大佬讲解。这个是看java并发编程之美遇到的问题
因为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,而外边这个只是给当前线程自己看的,不会改变公共对象的值
4 回答1.2k 阅读✓ 已解决
4 回答1.2k 阅读✓ 已解决
1 回答2.5k 阅读✓ 已解决
2 回答704 阅读✓ 已解决
2 回答1.7k 阅读
2 回答1.6k 阅读
2 回答1.3k 阅读
这里的 +1 为什么线程不安全?