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;
}
}
}
無鎖同步棧實現
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.