簡體   English   中英

Java JDK 1.7中的LinkedBlockingQueue

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM