android常用的锁 AtomicInteger lock

AtomicInteger是一种乐观锁——非阻塞同步

/**
     * Atomically increments by one the current value.
     *
     * @return the updated value
     */
    public final int incrementAndGet() {
        for (;;) {
            int current = get();
            int next = current + 1;
            if (compareAndSet(current, next))
                return next;
        }
}

incrementAndGet()方法在一个无限循环体内,不断尝试将一个比当前值大1的新值赋给自己,如果失败则说明在执行"获取-设置"操作的时已经被其它线程修改过了,于是便再次进入循环下一次操作,直到成功为止。这个便是AtomicInteger原子性的"诀窍"了,继续进源码看它的compareAndSet,可以发现是一种CAS操作

public final boolean compareAndSet(int expect, int update) {
        return unsafe.compareAndSwapInt(this, valueOffset, expect, update);
}

android常用的锁 AtomicInteger lock_第1张图片

Lock锁的使用方式:

android常用的锁 AtomicInteger lock_第2张图片

你可能感兴趣的:(android,android)