器要更新一个内存位置的值的时候,它首先将目前内存位置的值与它所知道的修改前的值进行对比(要知道在多处理的时候,你要更新的内存位置上的值有可能被其他处理更新过,而你全然不知),如果内存位置目前的值与期望的原值相同(说明没有被其他处理更新过),那么就将新的值写入内存位置;而如果不同(说明有其他处理在我不知情的情况下改过这的值咯),那么就什么也不做,不写入新的
值(现在最新的做法是定义内存值的版本号,根据版本号的改变来判断内存值是否被修改,一般情况下,比较内存值的做法已经满足要求了)。CAS的价值所在就在于它是在硬件级别实现的,速度那是相当的快。JDK5.0中的原子类就是利用了现代处理器中的这个特性,可
以在不进行锁定的情况下,进行共享属性访问的同步。下面我们将举例说明锁无关栈(Stack)的实现方法。栈能以数组或者链表作为底下的储存结构,虽然采取链表为基础的实现方式会占用多一点空间去储存代表元素的节点,但却可避免处理数组溢出的问题。故此我们将以链表作为栈的基础,本文不打算展开对栈数据结构的论述,仅给出相应的实现代码://锁无关的栈实现importjava.util.concurrent.atomic.*;classNode
{Nodenext;Tvalue;publicNode(Tvalue,Nodenext){this.next=next;this.value=value;
}
}publicclassStack{AtomicReference>top=newAtomicReference>();publicvoidpush(Tvalue){booleansucessful=false;while(!sucessful){NodeoldTop=