public synchronized void put(Product pro){ while(index==p.length){ try {wait();} catch (InterruptedException e) {} } notifyAll(); p[index]=pro; index++; }
如上是Java并发编程中生产者的生产方法,如果notifyAll()叫醒本方的多个生产者,他们都满足循环条件,都往下执行吗?如果都往下执行那样不是相当与突破了synchronized,生产方法中又有多个生产者线程执行,导致了安全问题?
wait 是Object 类的方法,对此对象调用wait 方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify 方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态,也就是全部唤醒以后也是jvm随机调度一个一个的执行。