无锁同步栈实现

来源:互联网 发布:企业电话搜索软件 编辑:程序博客网 时间:2024/06/13 10:43
public class ConcurrentStack<E> {    private AtomicReference<Node<E>> top = new AtomicReference<Node<E>>();    ConcurrentStack(){    }        public void push(E item) {        Node<E> newHead = new Node<E>(item);        Node<E> oldHead = null;        do {            oldHead = top.get();            newHead.next = oldHead;        } while (!top.compareAndSet(oldHead, newHead));    }    public E pop() {        Node<E> newHead = null;        Node<E> oldHead = null;        do {            oldHead = top.get();            if (oldHead == null) { // return null;                continue;            }            newHead = oldHead.next;        } while (oldHead == null || !top.compareAndSet(oldHead, newHead));        return oldHead.item;    }    private static class Node<E> {        public final E item;        public Node<E> next;        public Node(E item) {            this.item = item;        }    }}