[英]java threads simple stupid program
我希望有人能幫助我。 我一直在嘗試使用Java線程制作交通信號燈。 有兩個圓圈。 每個圓圈是一個燈(螺紋)。 我希望每個燈工作x毫秒,然后關閉然后讓另一個燈工作(再次重復幾秒鍾..)
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();
我相信我的問題是通過等待/通知方法發生的。 請幫我解決這個問題!
當您的代碼讀取時,它將等待LAMP_WORKING_TIME
ms,將工作設置為false,並在下一個循環中立即將其設置為true。 你只是在它working
時才睡覺,所以你的“開啟”周期是LAMP_WORKING_TIME
,“關閉”周期與釋放和重新獲取鎖的時間一樣長。 可能少於1ms。
您可能希望在實例之間共享lock
。 因此,要么將其設置為static
要么將其作為參數傳遞給Runnables
/ Threads
,而不是為每個實例創建一個新實例,即使它是final
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.