java threads简单的愚蠢程序

时间:2012-02-14 17:17:31

标签: java multithreading

我希望有人会帮助我。我一直在尝试使用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方法发生的。 求你帮我解决一下!

2 个答案:

答案 0 :(得分:2)

当您的代码读取时,它将等待LAMP_WORKING_TIME ms,将工作设置为false,并在下一个循环中立即将其设置为true。你只是在working为真时才睡觉,所以你的“开启”周期为LAMP_WORKING_TIME,“关闭”周期与释放和重新获取锁的时间一样长。可能不到1毫秒。

答案 1 :(得分:1)

您可能希望在实例之间共享lock。因此,要么将其设为static,要么将其作为参数传递给Runnables / Threads,而不是为每个实例创建一个新实例,即使它是final