gpt4 book ai didi

Java监视器实现

转载 作者:太空宇宙 更新时间:2023-11-04 07:47:27 26 4
gpt4 key购买 nike

我正在尝试用 Java 解决男女通用浴室问题。简而言之,就是一间浴室里有无数个厕所,男女都可以使用。男人和女人不能同时在浴室,但几个男人或女人可以。男人和女人由线程表示,浴室由监视器(具有同步方法的共享对象,监视并指示并发如何工作)表示。

现在回答我的问题。通常你会写这样的内容:

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

要唤醒该进程,请使用notify()但我(认为我)需要能够分别通知男性和女性。如果一个男人进入浴室,我希望他通知队列中的所有男人。我可以在监视器中使用几个信号量,但这在练习中是不允许的。我可以在监视器中使用可以等待和通知的条件吗?如果可以,如何使用?我尝试过,但遇到了一堆涉及非法监视器状态的错误。

最佳答案

您需要使用 notifyAll 来捕获所有情况(通常 notify 更具体)。您的 while 循环(不要使用 if)可以防止在不需要的情况下继续。

更高效,但也更详细,您可以使用 java.util.concurrent.locks 中的锁中的 Condition

关于Java监视器实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15058482/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com