读书人

无锁同步栈兑现

发布时间: 2013-04-12 18:33:12 作者: rapoo

无锁同步栈实现

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;        }    }}

读书人网 >软件架构设计

热点推荐