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的特性有关。具体找到明确解释,后期补上,知道原理的朋友,请给我留言,十分感谢线程