我希望有人会帮助我。我一直在尝试使用Java Threads制作交通信号灯。 有两个圆圈。每个圆圈都是一盏灯(线)。我希望每盏灯工作x ms,然后关闭,让另一盏灯工作(再过几秒钟又一次......)
public void run()
{
while (true)
{
repaint();
if (working)
{
System.out.println(name + " is WORKING ");
try
{
Thread.sleep(LAMP_WORKING_TIME);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
System.out.println(name + " has done working");
synchronized (lock)
{
this.working = false;
lock.notifyAll();
}
}
else
{
try
{
System.out.println(name + " is waiting..");
synchronized (lock)
{
lock.wait();
working = true;
}
System.out.println(name + " is WAKING UP AFTER WAIT");
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
}
当lock被声明为类的属性时:
private final Object lock = new Object();
我相信我的问题是通过wait / notify方法发生的。 求你帮我解决一下!
答案 0 :(得分:2)
当您的代码读取时,它将等待LAMP_WORKING_TIME
ms,将工作设置为false,并在下一个循环中立即将其设置为true。你只是在working
为真时才睡觉,所以你的“开启”周期为LAMP_WORKING_TIME
,“关闭”周期与释放和重新获取锁的时间一样长。可能不到1毫秒。
答案 1 :(得分:1)
您可能希望在实例之间共享lock
。因此,要么将其设为static
,要么将其作为参数传递给Runnables
/ Threads
,而不是为每个实例创建一个新实例,即使它是final
。