for(int i = 1; i < 10000; i++) {
Command nextCommand = getNextCommandToExecute();
}
我想运行上述程序60分钟。因此,我不需要做循环,而是需要做类似的事情 -
long startTime = System.nanoTime();
do{
Command nextCommand = getNextCommandToExecute();
} while (durationOfTime is 60 minutes);
但我不确定,我该如何让这个程序运行60分钟。
答案 0 :(得分:4)
启动一个休眠60分钟的后台线程并退出:
Runnable r = new Runnable() {
@Override
public void run() {
try {
Thread.sleep(60 * 60 * 1000L);
}
catch (InterruptedException e) {
// ignore: we'll exit anyway
}
System.exit(0);
}
}
new Thread(r).start();
<your original code here>
答案 1 :(得分:2)
long startTime = System.currentTimeMillis();
do
{
//stuff
} while (System.currentTimeMillis() - startTime < 1000*60*60);
答案 2 :(得分:1)
尝试以下方法:
long startTime = System.currentTimeMillis();
long endTime = startTime + (60*60*1000);
while(System.currentTimeMillis() <= endTime) {
Command nextCommand = getNextCommandToExecute();
}
此方法的一个缺点是,如果您尝试执行的Command
超过60分钟计时器或从未完成。如果不允许这种行为,你最好实现一个线程来中断运行这个循环的任何线程。
答案 3 :(得分:0)
您可以使用:
long startTime = System.nanoTime();
do {
Command nextCommand = getNextCommandToExecute();
} while ((System.nanoTime() - startTime) < 60 * 60 * 1000000000L);
请注意System.nanoTime()
与使用System.currentTimeMillis()
略有不同,不仅在比例中,而且在衡量内容:System.nanoTime()
是已用时间,而System.currentTimeMillis()
是系统时间(挂钟)。如果系统时间更改,System.currentTimeMillis()
无法按预期工作。 (但这不适用于夏季更改,因为返回值为UTC / GMT。)
1000000000L
纳秒是一秒。请注意L
的{{1}}。在Java 7中,您还可以编写更具可读性的long
。
答案 4 :(得分:0)
long startTime = System.currentTimeMillis();
do{
Command nextCommand = getNextCommandToExecute();
}while (startTime < startTime+60*60*1000);