如何替换Java信号量';s获取并释放Java监视器同步、等待和通知(全部)

如何替换Java信号量';s获取并释放Java监视器同步、等待和通知(全部),java,multithreading,monitors,Java,Multithreading,Monitors,我的代码可以使用信号量,但我想使用Java监视器实现这一点:wait、notify、notifyAll和synchronized,而不是acquire和release。谁能告诉我怎么做 public class Track { private final Semaphore mutex = new Semaphore(1,true); private final Semaphore use = new Semaphore(1,true); public Track()

我的代码可以使用信号量,但我想使用Java监视器实现这一点:wait、notify、notifyAll和synchronized,而不是acquire和release。谁能告诉我怎么做

public class Track {

    private final Semaphore mutex = new Semaphore(1,true);
    private final Semaphore use = new Semaphore(1,true);

    public Track(){}

    public void gebruikWissel(String v) throws InterruptedException
    {
        mutex.acquire();
        System.out.format("Trein %s maakt gebruik van de wissel", v);
        mutex.release();
    }

    public void useTrack() throws InterruptedException
    {
        use.acquire();
    }

    public void stopUseTrack()
    {
        use.release();
    }
}

我不认为你能改变你的课堂结构。例如,您甚至不能编写使用同步的
useTrack()
或“stopUseTrack()”方法


对于人们来说,从同步到信号量更为常见。为什么您认为您想走相反的方向。

您可以使用同步和简单的内部计数器来完成,例如:

private int counter;

public synchronized void useTrack() throws InterruptedException
{
    while(counter == 1) {
      wait();
    }
    counter++;
}

public synchronized void stopUseTrack()
{
    counter--;
    notifyAll();
}
更新:
我不知道这是家庭作业。嗯,我希望我能取得好成绩

因为我们上学必须:D@user735646-您应该添加“家庭作业”标签,并尝试先自己完成。要求有经验的开发人员完成您的全部任务是弄巧成拙的。试一试,如果它不起作用,试着调试它。调试是如此重要,令人惊讶的是,这里有这么多来自经验丰富的开发人员的帖子显示出在这方面技能的严重缺乏。你应该通过编写不起作用的软件(这很容易做到,老实说:)并修复它来提高它的水平。投反对票?为什么?答案是正确的。“家庭作业”标签是在我回答后加上的。我可以删除我的答案,但现在这只猫已经出笼了?哈哈,jag Visster det när jag såg rubriken。嘿,埃米尔!