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前一步
如果将while改成if,则唤醒时,不再进行判断,直接从wait()之后进行执行,这种情形,在effective java一书中有提及,但是没有更深的解释,个人猜测为while跟if的特性有关。具体找到明确解释,后期补上,知道原理的朋友,请给我留言,十分感谢