Java并发:CompareAndSwap(CAS)

【1】CAS:
CAS:CompareAndSwap, 翻译成比较并交换。
java.util.concurrent包中借助CAS实现了区别于synchronouse同步锁的一种乐观锁,使用这些类在多核CPU的机器上会有比较好的性能.

【2】compareAndSet()方法:

    private static final Unsafe unsafe = Unsafe.getUnsafe();
    private static final long valueOffset;

    static {
      try {
        valueOffset = unsafe.objectFieldOffset
            (AtomicBoolean.class.getDeclaredField("value"));
      } catch (Exception ex) { throw new Error(ex); }
    }

    private volatile int value;(内存值)

    public AtomicBoolean(boolean initialValue) {
        value = initialValue ? 1 : 0;
    }

    public final boolean get() {
        return value != 0;
    }

    /**
     * Returns : CAS有3个操作数,内存值value,预期值e,要修改的新值u。当且仅当预期值e和内存值value相同时,将内存值value修改为u,否则什么都不做。
     *  if(value == expect){
     *     value = update;
     *  }
     * 
     */
    public final boolean compareAndSet(boolean expect, boolean update) {
        int e = expect ? 1 : 0;
        int u = update ? 1 : 0;
        return unsafe.compareAndSwapInt(this, valueOffset, e, u);
    }

你可能感兴趣的:(并发编程,java,并发,CAS)