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 + -
显示快捷键?