最近已經發現這樣的Java併發採訪任務:簡單的無鎖堆棧
寫了兩種方法簡單無鎖堆棧:push和pop。
我做了concent:
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面試新手。
這是一個不正確的樣品是可能發生的序列在以下順序處理: 1)推:C = count.incrementAndGet() 2)pop:c = count.get(); 3)pop:top = data [c] 4)data [c] = 所以你得到一箇舊的或未初始化的值。 這是免費鎖,但不正確/強大 – SkateScout 2017-02-04 22:49:50