3 回答
TA贡献1853条经验 获得超18个赞
我根本不会使用 Calender 库,而是使用System.currentTimeMillis()
这是一个在 5.5 秒后终止的 while 循环:
long end = System.currentTimeMillis() + 5500;
while (System.currentTimeMillis() < end) {
//Do something
}
//Exit after 5.5 seconds
这个版本的优点是,您可以在循环运行时更改结束时间,从而更改循环运行的时间。
TA贡献1804条经验 获得超8个赞
与其实现我自己的,我更喜欢/使用Timer它是一种线程工具,可以在后台线程中安排任务以供将来执行。像,
Timer t = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
System.out.println("Five seconds");
}
};
t.schedule(task, TimeUnit.SECONDS.toMillis(5) + 500); // 5.5 seconds.
TA贡献1830条经验 获得超9个赞
java.time
VoroX的回答是正确的。但是使用 java.time 使它更加优雅和自我记录。
我们通过循环调用Instant.now每次以捕获新的当前时间。日期时间对象不会自动更新。它们是那一刻的快照,冻结了。在每种情况下询问您何时需要当前时间。
Duration wait = Duration.ofSeconds( 5 ).plusMillis( 500 ) ; // 5.5 seconds.
Instant now = Instant.now() ;
Instant stop = now.plus( d ) ;
while( Instant.now().isBefore( stop ) )
{
// Do some task.
}
在实际工作中,我还会添加一个检查,stop.isAfter( start )以防 Duration 被编辑为负值。
添加回答
举报