AtomicInteger来研究在没有锁的情况下是如何做到数据正确性的?
这里举例说明一个方法:getAndIncrement
public final int getAndIncrement() {
for (;;) {
int current = get();
int next = current + 1;
if (compareAndSet(current, next))
return current;
}
}
这里面有个compareAndSet方法,其实是JNI调用,
在这里采用了CAS操作,每次从内存中读取数据然后将此数据和+1后的结果进行CAS操作,如果成功就返回结果,否则重试直到成功为止。
而compareAndSet利用JNI来完成CPU指令的操作。
本文详细解析了AtomicInteger类中的getAndIncrement方法实现原理。通过循环CAS操作保证了原子性,即使在无锁情况下也能确保数据正确性。该方法利用JNI调用底层CPU指令完成比较并交换操作。
5万+

被折叠的 条评论
为什么被折叠?



