簡體   English   中英

Java線程簡單愚蠢的程序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM