我想在特定的给定时间使用Java 执行任务。我的代码有效,但看起来不太好。我正在比较两个字符串。我尝试使用getTimeInMills()比较日期,但数字不一样。
这是我的代码:
import java.util.Calendar;
class Voter {
Calendar current,deadline;
boolean keepGoing = true;
public static void main(String[] args) {
Voter strzal = new Voter();
strzal.shoot();
}
public void shoot() {
deadline = Calendar.getInstance();
deadline.set(2011,6,21,11,20,00);
while (keepGoing) {
// wait 1 second
try {
Thread.sleep(1000);
System.out.print(".");
} catch (InterruptedException ex) { ex.printStackTrace(); }
current = Calendar.getInstance();
if (deadline.getTime().toString().equals(current.getTime().toString())) {
System.out.println("Got it!");
keepGoing = false;
} // end of if
} // end of while
} // end of shoot() method
}
我正在循环中运行,等待当前时间等于截止日期(例如我将其设置为2011年7月21日上午11:10)。
如何改进我的代码?我想使用Calendar类中的compareTo()或getTimeInMills()方法,但我无法正确设置截止日期。
提前致谢。
答案 0 :(得分:4)
使用ScheduledExecutorService为您管理,而不是睡觉并等待合适的时间。 schedule方法听起来就像你需要的那样。
答案 1 :(得分:3)
使用ScheduledExecutorService是一个更好的建议,但是为了您的知识
Calendar deadline = Calendar.getInstance();
deadline.set(2011,6,21,11,20,00);
long endTime = deadline.getTime().getTime();
// later
long current = System.currentTimeMillis();
if (current >= endTime) {
System.out.println("Got it!");
break;
}
答案 2 :(得分:2)
不要重新发明轮子!有一个JDK类 - ScheduledThreadPoolExecutor。以下是一行代码:
new ScheduledThreadPoolExecutor(1).schedule(new Runnable() {
public void run() {
// Do something
}
}, 1, TimeUnit.HOURS);
此示例等待1小时,但您可以用这么多秒或任何您需要的内容替换它。
完成工作。