循环延迟

时间:2015-11-26 21:48:45

标签: java timer while-loop

我需要一个带延迟的循环(比如一个计时器),但结尾有问题,这是我的代码:

while(true) {
    if (someValue == 10) {
        break;
    }
    //Wait two seconds. <-----
}
System.out.println("While Ended.");

这很好,但需要每2秒重复一次。我尝试使用Timer,但是&#34;虽然结束了。&#34;消息显示在计时器结束之前。我该如何解决这个问题?

  • 我需要这个过程不要冻结线程。 (比如while循环)。
  • 不需要精确度。

2 个答案:

答案 0 :(得分:5)

您可以将Thread.sleep置于while循环中以休眠几秒钟。该解决方案存在问题,例如它会阻塞线程,打断中断等等。

最好使用ScheduledThreadPoolExecutor并使用schedule方法安排任务每隔很多秒运行一次。这是正确的,但你应该对多线程程序的工作方式有所了解,否则你会犯错误并产生微妙的错误。

答案 1 :(得分:1)

当你需要像计时器这样的东西时,你可以使用计时器:

import java.util.Timer;
import java.util.TimerTask;

public class TTimer extends TimerTask {

    private static Timer timer; 

    @Override
    public void run() {
        System.out.println("timer");
    }

    public void stop() {
        timer.cancel();
        timer.purge();
        this.cancel();
    }

    public TTimer( long interval) {
        timer = new Timer(true);
        timer.scheduleAtFixedRate(this, 0, interval);
    }

    public static void main(String[] args) {
        TTimer t = new TTimer(2000);
        while( true ) {
            try {
                Thread.sleep(1000);
            } 
            catch (InterruptedException e) {
            }
        }
    }
}

将代码放在run()方法中,检查条件(somevalue == 10)并调用stop方法关闭定时器。