-1

私のコードはセマフォで動作しますが、これを Java モニターで動作させたいと考えています。どうすればこれを行うことができるか教えてもらえますか?

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 に答える