-1

我的代码适用于信号量,但我想让它适用于 Java 监视器:等待、通知、notifyAll 和同步,而不是获取和释放。谁能告诉我我该怎么做?

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();
    }
}
4

2 回答 2

3

您可以使用同步和简单的内部计数器来做到这一点,例如:

private int counter;

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

public synchronized void stopUseTrack()
{
    counter--;
    notifyAll();
}

更新:没有意识到这是家庭作业。好吧,我希望我能取得好成绩!

于 2012-03-22T11:15:59.083 回答
0

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

人们同步信号量更常见。为什么你认为你想朝相反的方向走。

于 2012-03-22T11:03:59.427 回答