使用计时器类进行线程化时的无限循环

时间:2013-09-28 18:14:07

标签: java multithreading timer

我已经创建了一个计时器类,并使用junit4进行测试。计时器通知另一个类,然后激活方法。在测试时我无法检查发送给观察者的值是什么,因为编译器卡在用于计时器的always循环中。这是计时器的测试和开始代码。

 public void testSimpleTimerAsThread() throws InterruptedException 
    { 
     SimpleTimer st = new SimpleTimer(1000); 
     st.start(); 
     Thread.sleep(250); // So we are 1/4th a second different 
     for (int x=0;x<5;x++) 
     { 
     assertEquals(x, st.getRound()); // assumes round starts at
     Thread.sleep(1000); // wait for the next time change
     } 
    }

public void start()
    {
        while (flag)
        {
            timeChanged();
            try
            {
                // Sleep for var seconds.
                Thread.sleep(1000);
            }
            catch (InterruptedException e)
            {
            }
        }
    }

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

SimpleTimer课程中,您应该覆盖run()方法,而不是start()

假设SimpleTimer扩展Thread,您已覆盖实际创建并启动线程的Thread中的方法,因此没有创建新线程并且您的线程代码正在执行调用start()时的主线程,这就是它挂起的原因。