[英]LinkedBlockingQueue in java jdk 1.7
我閱讀了JDK1.7中的LinkedBlockingQueue源代碼,但無法理解該方法。
public boolean offer(E e) {
if (e == null) throw new NullPointerException();
final AtomicInteger count = this.count;
if (count.get() == capacity)
return false;
int c = -1;
Node<E> node = new Node(e);
final ReentrantLock putLock = this.putLock;
putLock.lock();
try {
if (count.get() < capacity) {
enqueue(node);
c = count.getAndIncrement();
if (c + 1 < capacity)
notFull.signal();
}
} finally {
putLock.unlock();
}
if (c == 0)
signalNotEmpty();
return c >= 0;
}
我不知道這是怎么回事。
if (c == 0)
signalNotEmpty();
如果c == 0,則表示隊列為空,因此我認為方法應為
signalEmpty();
有誰能啟發我? 謝謝。
c
初始化為
c = count.getAndIncrement();
因此,如果插入新節點之前隊列的大小,則其值為。 因此,如果在插入新節點之前將大小設置為0,則將調用signalNotEmpty()來表示隊列從空變為非空 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.