併發程式設計喚醒判斷用while

夏天9965發表於2020-11-01

為什麼判定用while不用if

用if可能會導致 不應該喚醒的時候程式繼續執行如notifyAll喚醒所有程式 但是當前方法的條件不滿足喚醒條件還繼續向下執行

  1. 部分程式碼 完整程式碼參考:碼雲
public void demo() {
        synchronized (this) {
            this.notifyAll();
        }
}
 public synchronized boolean put(E e) throws InterruptedException {
        checkNotNull(e);
        try {
            /**
             * 為什麼用while不用if 在多執行緒等待判斷中要用while進行判斷
             *  
             */
            while (count == items.length)
                this.wait();
            items[putIndex] = e;
            if (++putIndex == items.length)
                putIndex = 0;
            count++;
            this.notifyAll();

            return true;
        } finally {
        }
    }

相關文章