1

是否可以在调用之前检查是否至少有一个线程正在等待notifyAll()

我有一个队列,厨师把菜放进去,而人们来拿菜。如果厨师将菜放在空队列中,则必须通知人们他们可以来(wait()如果队列是空的并且他们想得到菜,则设置为)。

所以该方法以

public synchronized void put(String[] dishes){
    if(dishesQueue.size() == 0){
        notifyAll();
    }
    (...)
}

但是现在的问题是,当厨师第一次放菜时,队列是空的,但还没有人在等,所以我得到了一个java.lang.IllegalMonitorStateException。有没有办法先检查是否有线程在等待,如果是,notifyAll()?或者我是否使用了一些“棘手”的解决方案boolean firstTime

另外为了理解,即使只有厨师调用put(...),该方法也必须synchronized如此,因为它与dishsQueue一起操作,该方法也被该get()方法操作?

4

0 回答 0