最近发现了这样一个java-concurrency面试任务:
使用两种方法编写简单的无锁堆栈:push 和 pop。
我做了浓缩:
import java.util.concurrent.atomic.AtomicInteger;
public class Stack {
private AtomicInteger count = new AtomicInteger(-1);
private Object[] data = new Object[1000];
public void push(Object o) {
int c = count.incrementAndGet();
data[c] = o;
}
public Object pop() {
Object top;
int c;
while (true) {
c = count.get();
if (c == -1) return null;
top = data[c];
if (count.compareAndSet(c, c-1))
return top;
}
}
}
是否与预期的方法相似?或者“无锁堆栈”意味着不同的东西?请帮助一个java面试新手。