concurrentstack.java

来自「java concurrency in practice 源码. JAVA」· Java 代码 · 共 48 行

JAVA
48
字号
package net.jcip.examples;import java.util.concurrent.atomic.*;import net.jcip.annotations.*;/** * ConcurrentStack * <p/> * Nonblocking stack using Treiber's algorithm * * @author Brian Goetz and Tim Peierls */@ThreadSafe        public class ConcurrentStack <E> {    AtomicReference<Node<E>> top = new AtomicReference<Node<E>>();    public void push(E item) {        Node<E> newHead = new Node<E>(item);        Node<E> oldHead;        do {            oldHead = top.get();            newHead.next = oldHead;        } while (!top.compareAndSet(oldHead, newHead));    }    public E pop() {        Node<E> oldHead;        Node<E> newHead;        do {            oldHead = top.get();            if (oldHead == null)                return null;            newHead = oldHead.next;        } while (!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;        }    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?