我需要一个带延迟的循环(比如一个计时器),但结尾有问题,这是我的代码:
while(true) {
if (someValue == 10) {
break;
}
//Wait two seconds. <-----
}
System.out.println("While Ended.");
这很好,但需要每2秒重复一次。我尝试使用Timer
,但是&#34;虽然结束了。&#34;消息显示在计时器结束之前。我该如何解决这个问题?
答案 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方法关闭定时器。