无锁同步栈实现

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;

        }

    }

}


你可能感兴趣的:(同步)