最近我发现了这样一个与Java并发相关的面试任务:
编写一个简单的无锁(lock-free)栈,包含两个方法: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面试新手。