最简单的方法是使用Timer
. 有了这个,你就不需要if
逻辑了。您可以firstTime
在安排TimerTask
.
Timer timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
// do something
}
};
// schedule the task to be run every 100ms (0.1 sec),
// starting after "threshold" milliseconds have past
timer.schedule(task, threshold, 100);
从您的描述中不清楚您是想在超过时间阈值后重复“做某事”,还是只想等到某个时间过去后再“做某事”一次。上面的代码是针对重复情况的。对于未来某个时间的一次性事件,将最后一行更改为:
timer.schedule(task, threshold);
如果你使用 Swing,你应该使用 Swing Timer而不是 java.util.Timer。有关更多信息,请参阅如何使用摆动计时器。
编辑:您的评论澄清了一些事情。做你描述的事情相当容易:
Timer timer = new Timer();
TimerTask task = new TimerTask() {
private final long start = System.currentTimeMillis();
@Override
public void run() {
if (System.currentTimeMillis() - start < threshold) {
// do something
} else {
// do something else
}
}
};
// schedule the task to be run every 100ms (0.1 sec), starting immediately
timer.schedule(task, 0, 100);
请注意,“做某事”和“做其他事情”可以是对封闭类的方法调用。
一种更简洁的方法可能是定义几个TimerTask
计划在不同时间执行的 s。触发异常的“其他”任务可以安排在阈值时间一次性执行。您还可以取消单个任务,甚至可以安排将取消另一个任务的任务。