與Timer有關的網站上的文章討論如何使用Timer進行編程。計算機如何實現Java Timer?
我問另外一個問題。 Java如何執行Timer方法?
由於不用循環來檢查當前時間是否是需要的時間點,所以避免了耗時的工作,我認爲Timer並沒有簡單地通過使用while循環來實現,以持續檢查和比較當前時間時間到了所需的時間點。
謝謝!
與Timer有關的網站上的文章討論如何使用Timer進行編程。計算機如何實現Java Timer?
我問另外一個問題。 Java如何執行Timer方法?
由於不用循環來檢查當前時間是否是需要的時間點,所以避免了耗時的工作,我認爲Timer並沒有簡單地通過使用while循環來實現,以持續檢查和比較當前時間時間到了所需的時間點。
謝謝!
根據適用於Javadoc
此類不提供實時保證:它調度任務 使用的Object.wait(long)方法。
如果你看看代碼,你會發現一個稱爲主循環的方法。第一行幾行復制如下。
private void mainLoop() {
while (true) {
try {
而且它在它內部使用一個while循環以及Object.wait()
來做等待。
謝謝。那麼Object.wait()是如何實現的?我仍然假設它不使用while循環。 – user1914692
Object.wait()是一個「內置」方法,它是用本地代碼實現的,而不是在Java中,它使用底層操作系統的設施來暫停執行一個線程(所以OS的調度程序不會給它任何CPU時間) –
非常感謝!這就是我的想法。尋找答案,那麼操作系統如何在沒有CPU時間的情況下實現它?任何鏈接,以便我可以找到參考? – user1914692
我認爲定時器不是簡單地通過使用while循環來實現 檢查和比較當前時間到所需的時間點。
是的,它是。唯一的優化是;它正在使用基於nextExecutionTime的優先級隊列來執行任務。
JavaDoc的狀態
定時器對象是用來 執行所有的定時器的任務,依次單個後臺線程。計時器任務應該快速完成,即 。如果一個計時器任務需要花費過多的時間才能完成,它會「佔用」計時器的任務執行線程。這可以反過來,延遲 的後續任務的執行
Timer類包含
TaskQueue
這是TimerTasks的優先級隊列,下令nextExecutionTime。TimerThread(queue)
定時器的任務執行線程,它等待(queue.wait()
)定時器隊列上的任務。TimerThread
有private void mainLoop() {
其中連續while(true)
將繼續通過與currentTimeMillis
currentTime = System.currentTimeMillis();
executionTime = task.nextExecutionTime;
if (taskFired = (executionTime<=currentTime)) {
比較nextExecutionTime
檢查任務,如果達到,然後調用
if (taskFired) // Task fired; run it, holding no locks
task.run();
如果Java Timer使用循環,那麼定時器有多精確? – user1914692
1.轉到[OpenJDK源碼回購](http://hg.openjdk.java.net/); 2.尋找答案; 3.; 4.利潤。 – TC1
利潤?這是什麼意思? – user1914692
這是對此的參考:http://www.youtube.com/watch?v = tO5sxLapAts –