1
for(int i = 1; i < 10000; i++) {
Command nextCommand = getNextCommandToExecute();
}

我想运行上述程序 60 分钟。所以我需要做一些类似的事情,而不是 for 循环

long startTime = System.nanoTime();

    do{
    Command nextCommand = getNextCommandToExecute();
    } while (durationOfTime is 60 minutes);

但我不确定,我应该如何让这个程序运行 60 分钟。

4

5 回答 5

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>
于 2012-05-22T18:47:25.787 回答
2
long startTime = System.currentTimeMillis();
do 
{
  //stuff
} while (System.currentTimeMillis() - startTime < 1000*60*60);
于 2012-05-22T18:48:16.850 回答
1

尝试以下操作:

long startTime = System.currentTimeMillis();
long endTime = startTime + (60*60*1000);

while(System.currentTimeMillis() <= endTime) {
    Command nextCommand = getNextCommandToExecute();
}

这种方法的一个缺点是,如果Command您尝试执行超过 60 分钟的计时器,或者根本不会完成。如果不允许这种行为,最好实现一个线程来中断正在运行此循环的任何线程。

于 2012-05-22T18:49:35.240 回答
0

你可以使用:

long startTime = System.nanoTime();
do {
    Command nextCommand = getNextCommandToExecute();
} while ((System.nanoTime() - startTime) < 60 * 60 * 1000000000L);

请注意,与不仅在刻度上System.nanoTime()使用略有不同,而且在测量方面也有所不同:是经过的时间,是系统时间(挂钟)。如果系统时间发生变化,则无法按预期工作。(但这不适用于夏令时更改,因为返回值是 UTC / GMT。)System.currentTimeMillis()System.nanoTime()System.currentTimeMillis()System.currentTimeMillis()

1000000000L纳秒是一秒。请注意Lfor long。在 Java 7 中,您还可以编写更具可读性的1_000_000_000L.

于 2012-05-22T18:49:10.667 回答
0
long startTime = System.currentTimeMillis();

do{
Command nextCommand = getNextCommandToExecute();
}while (startTime < startTime+60*60*1000);
于 2012-05-22T18:51:29.307 回答