运行Java一段特定的时间

时间:2012-05-22 18:42:38

标签: java

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分钟。

5 个答案:

答案 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);