我希望在特定的给定时间(给定时间的)使用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()方法,但不能正确设置截止日期。
提前谢谢。
发布于 2011-07-21 09:41:02
使用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;
}发布于 2011-07-21 09:36:25
使用ScheduledExecutorService来管理这一点,而不是睡觉和等待合适的时间。日程安排方法听起来似乎可以满足您的需要。
发布于 2011-07-21 09:40:56
别再发明轮子了!这有一个JDK类-- ScheduledThreadPoolExecutor。这里有一行代码可以完成所有操作:
new ScheduledThreadPoolExecutor(1).schedule(new Runnable() {
public void run() {
// Do something
}
}, 1, TimeUnit.HOURS);此示例等待1小时,但您可以用这么多秒或任何您需要的时间来替换它。
工作完成了。
https://stackoverflow.com/questions/6774019
复制相似问题