我的代码使用信号量,但我希望使用Java监视器:wait,notify,notifyAll和synchronized,而不是获取和释放。谁能告诉我怎么做到这一点?
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();
}
}
答案 0 :(得分:3)
你可以使用synchronized和一个简单的内部计数器来完成它,例如:
private int counter;
public synchronized void useTrack() throws InterruptedException
{
while(counter == 1) {
wait();
}
counter++;
}
public synchronized void stopUseTrack()
{
counter--;
notifyAll();
}
更新: 没有意识到这是功课。好吧,我希望我能获得好成绩!
答案 1 :(得分:0)
我认为你的课程结构并不合适。例如,您甚至无法编写使用同步的useTrack()
或“stopUseTrack()”方法。
人们更常见的是将从同步转到信号量。为什么你认为你想要朝着相反的方向前进。