1

呼び出す前に少なくとも1つのスレッドが待機しているかどうかを確認することは可能notifyAll()ですか?

シェフが料理を入れる行列がありますが、人々はその料理を手に入れます。料理人が皿を空の列に入れた場合、人々は彼らが来ることができることを通知されなければなりません(wait()列が空で皿を手に入れたい場合に設定されます)。

その方法はで始まります

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

しかし、今問題なのは、シェフが初めて料理を入れるとき、キューは空ですが、まだ誰も待っていないので、私はを取得しjava.lang.IllegalMonitorStateExceptionます。待機中のスレッドがあるかどうかを最初に確認する方法はありますか?ある場合は、確認する方法はありnotifyAll()ますか?または、何かで「トリッキーな」ソリューションを使用したことがありboolean firstTimeますか?

さらに理解するために、シェフだけが呼び出したとしても、メソッドによって操作されるdisishQueueで動作するためput(...)、メソッドもそうである必要がありますか?synchronizedget()

4

0 に答える 0