利用Atomic原子引用,采用CAS的方式,实现线程安全的链表栈的实现
关键点
关键在于用
AtomicReference原子类包装栈顶节点,在更改新的栈顶节点的时候,判断原子引用的栈顶是否还是之前获取时的栈顶,如果不是则重新通过AtomicReference获取栈顶。
关键代码
headReference.compareAndSet(oldHead, newHead)
// TODO 这是线程安全的版本
public class MyStack2 {
class Node{
int value;
Node next;
}
// TODO 这个在堆中是线程共享的
private final AtomicReference<Node> headReference = new AtomicReference<>();