3 回答

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超18個(gè)贊
我根本不會(huì)使用 Calender 庫,而是使用System.currentTimeMillis()
這是一個(gè)在 5.5 秒后終止的 while 循環(huán):
long end = System.currentTimeMillis() + 5500;
while (System.currentTimeMillis() < end) {
//Do something
}
//Exit after 5.5 seconds
這個(gè)版本的優(yōu)點(diǎn)是,您可以在循環(huán)運(yùn)行時(shí)更改結(jié)束時(shí)間,從而更改循環(huán)運(yùn)行的時(shí)間。

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超8個(gè)贊
與其實(shí)現(xiàn)我自己的,我更喜歡/使用Timer它是一種線程工具,可以在后臺(tái)線程中安排任務(wù)以供將來執(zhí)行。像,
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貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個(gè)贊
java.time
VoroX的回答是正確的。但是使用 java.time 使它更加優(yōu)雅和自我記錄。
我們通過循環(huán)調(diào)用Instant.now每次以捕獲新的當(dāng)前時(shí)間。日期時(shí)間對(duì)象不會(huì)自動(dòng)更新。它們是那一刻的快照,凍結(jié)了。在每種情況下詢問您何時(shí)需要當(dāng)前時(shí)間。
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.
}
在實(shí)際工作中,我還會(huì)添加一個(gè)檢查,stop.isAfter( start )以防 Duration 被編輯為負(fù)值。
添加回答
舉報(bào)