Неблокирующие структуры данных в Java могут быть реализованы с использованием атомарных операций и циклов CAS (Compare-and-Swap). Вот пример минимальной реализации неблокирующего стека с методами push() и pop(): import java.util.concurrent.atomic.AtomicReference;
public class NonBlockingStack<T> {
private static class Node<T> {
final T value;
Node<T> next;
Node(T value) {
this.value = value;
}
}
private final AtomicReference<Node<T>> top = new AtomicReference<>();
public void push(T value) {
Node<T> newNode = new Node<>(value);
Node<T> oldTop;
do {
oldTop = top.get();
newNode.next = oldTop;
} while (!top.compareAndSet(oldTop, newNode));
}
public T pop() {
Node<T> oldTop;
Node<T> newTop;
do {
oldTop = top.get();
if (oldTop == null) {
return null; // Стек пуст }
newTop =