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的特性有關。具體找到明確解釋,後期補上,知道原理的朋友,請給我留言,十分感謝線程