乐观锁与CAS操作

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指令的操作。


你可能感兴趣的:(乐观锁与CAS操作)