2014-10-10 84 views
1

從我的線程中,我應該每x秒鐘一件事。例如。讓x=3,它應該在幾秒鐘1, 4, 7, ...做到這一點。查找系統時鐘 - Java

使得螺紋wait()x秒不會do--,因爲它可能會中斷其他的東西(一個或多個)在此x秒 期間做的,因此無法跟蹤的之間傳遞的時間它應該的方式。 所以,線程應該想出一個有效的方式讓自己知道時鐘已經過去了012秒。

這樣做的有效方法是什麼?

我現在唯一的方法是不斷檢查系統時鐘,以確定它是第二個1還是4或7,即第二個i其中i%3==1。 但是,這太浪費了,並不是什麼好事。

這樣做的最好方法是什麼?

TIA。

// ====================

編輯:

我認爲這將我查找系統時鐘的方法和每隔一段時間都會打斷我。

Java是否有這樣的方法?

+0

你是在找[定時器](http://docs.oracle.com/javase/8/docs/api/java/util/Timer.html)?可能是'scheduleAtFixedRate'方法之一? – ajb 2014-10-10 00:26:25

+0

@ajb將看到計時器。你所做的事似乎也可以,但是我寧願去做什麼,如果有Java的話 – Roam 2014-10-10 00:31:43

回答

0

我不確定你想要做什麼 - 這樣的事情?

boolean interrupted; 
long endWait = System.currentTimeMillis() + 3000; // or 1000 * x 
do { 
    interrupted = false; 
    long timeRemaining = endWait - System.currentTimeMillis(); 
    if (timeRemaining <= 0) { 
     break; 
    } 
    try { 
     Thread.sleep(timeRemaining); 
    } catch (InterruptedException e) { 
     ... what you need to do when interrupted 
     interrupted = true; 
    } 
} while (interrupted);