是否可以在调用之前检查是否至少有一个线程正在等待notifyAll()
?
我有一个队列,厨师把菜放进去,而人们来拿菜。如果厨师将菜放在空队列中,则必须通知人们他们可以来(wait()
如果队列是空的并且他们想得到菜,则设置为)。
所以该方法以
public synchronized void put(String[] dishes){
if(dishesQueue.size() == 0){
notifyAll();
}
(...)
}
但是现在的问题是,当厨师第一次放菜时,队列是空的,但还没有人在等,所以我得到了一个java.lang.IllegalMonitorStateException
。有没有办法先检查是否有线程在等待,如果是,notifyAll()
?或者我是否使用了一些“棘手”的解决方案boolean firstTime
?
另外为了理解,即使只有厨师调用put(...)
,该方法也必须synchronized
如此,因为它与dishsQueue一起操作,该方法也被该get()
方法操作?