2013-02-25 73 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