2013-02-25 100 views
1

我正在嘗試在Java中使用Unisex Bathroom問題。簡而言之,有一間浴室可供男性和女性使用的無數廁所。男人和女人不能同時在浴室裏,但幾個男人或女人都可以。男人和女人由線程代表,浴室由監視器(同步方法的共享對象,監視並指示併發如何工作)。Java監視器實現

現在我的問題。通常你會寫是這樣的:

public synchronized void womanEnter() 
{ 
    while(menInTheBathroom>0 || menWaiting>0) 
    { 
     wait(); 
    } 
    //enter bathroom 
} 

而且喚醒這個過程了,你通知() 但我(我認爲)需要能夠單獨通知的男性和女性。如果有人進入洗手間,我希望他通知隊列中的所有人。我可以在顯示器中使用兩個信號量,但這在excersize中是不允許的。我可以在顯示器中使用我可以等待並通知的條件嗎?如果可以,我該怎麼辦?我試過了,但得到了一堆涉及非法監視狀態的錯誤。

+0

[Java unisex bathroom]的可能重複(http://stackoverflow.com/questions/11135207/java-unisex-bathroom) – trashgod 2013-02-25 00:46:49

回答

1

您將需要使用notifyAll來捕捉所有情況(通常notify更具體)。您的while循環(不要使用if)可防止在不需要的情況下繼續使用。

更有效率,但也更詳細地說,您可以使用java.util.concurrent.locks中的鎖Condition