我试图使用 System.currentTimeMillis(); 每秒运行一行代码。
代码:
while(true){
long var = System.currentTimeMillis() / 1000;
double var2 = var %2;
if(var2 == 1.0){
//code to run
}//If():
}//While
我想要运行的代码运行了多次,因为由于整个无限循环,var2 多次设置为 1.0。我只想在 var2 首次设置为 1.0 时运行代码行,然后每次 var2 在 0.0 之后变为 1.0 时运行代码行。
如果你想忙着等待秒数改变,你可以使用以下命令。
long lastSec = 0;
while(true){
long sec = System.currentTimeMillis() / 1000;
if (sec != lastSec) {
//code to run
lastSec = sec;
}//If():
}//While
更有效的方法是休眠直到下一秒。
while(true) {
long millis = System.currentTimeMillis();
//code to run
Thread.sleep(1000 - millis % 1000);
}//While
另一种方法是使用 ScheduledExecutorService
ScheduledExecutorService ses = Executors.newSingleThreadScheduledExecutor();
ses.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
// code to run
}
}, 0, 1, TimeUnit.SECONDS);
// when finished
ses.shutdown();
这种方法的优点是
- 您可以让多个不同时期的任务共享同一个线程。
- 您可以有非重复的延迟或异步任务。
- 您可以在另一个线程中收集结果。
- 您可以使用一个命令关闭线程池。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)