併發編程學習筆記 三------- 關於在if中和while中使用wait(),喚醒以後的區別

volatile int count;
int MAX_COUNT = 10;
    int MIN_COUNT =0;
public synchronized void  push(){
    while (count>=MAX_COUNT){
        try {

            System.out.println(Thread.currentThread().getName()+"need wait");
            wait();
            System.out.println(Thread.currentThread().getName()+"doNotify");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

若是使用while的時候,當該線程被喚醒時,首先執行while中的條件進行判斷,若是成功,則從wait()處以後進行執行,不然繼續wait(),能夠認爲屬於執行wait前一步java

若是將while改爲if,則喚醒時,再也不進行判斷,直接從wait()以後進行執行,這種情形,在effective java一書中有說起,可是沒有更深的解釋,我的猜想爲while跟if的特性有關。具體找到明確解釋,後期補上,知道原理的朋友,請給我留言,十分感謝線程

相關文章
相關標籤/搜索