不是ArrayBlockingQueue
單個操作是併發與任何其其它操作;他們總是採取相同的鎖定。即使對於size()
方法,也需要鎖定。ArrayBlockingQueue - 它真的是並行嗎?
public int size() {
final ReentrantLock lock = this.lock;
lock.lock();
try {
return count;
} finally {
lock.unlock();
}
}
在執行LinkedBlockingQueue
時,您有兩個鎖:put和take。 而對於size()
它採用AtomicInteger
所以不需要鎖。
所以我的問題是:爲什麼是在concurrent包這個實現 - 是真的ArrayBlockingQueue
併發?
它可以在並行環境中使用---這就是問題所在。 –