2012-05-10 183 views
7

作爲標題,有沒有辦法使定時器在毫秒級的閾值下工作?定時器:週期小於1毫秒

我的問題是類似下面的一個,但它是針對Java: Thread.Sleep for less than 1 millisecond

+0

你需要閱讀這個帖子http://www.rationaljava.com/2015/10/measuring-microsecond-in-java.html這個主題。 – Dan

+0

檢查這個答案一種解決方法: http://stackoverflow.com/a/35189397/4043486 –

回答

11

如果你想睡覺,Thread.sleep有2種方法,one of which accepts nanoseconds。如果您想安排任務,則可以使用ScheduledExecutorService,這些方法也可以使用納秒。

正如@MarkoTopolnik所解釋的,結果很可能不會精確到納秒。

+1

謝謝,我已經使用Executors.newSingleThreadScheduledExecutor()和它的工作了Thread.sleep的 – Hamal000

+2

的源代碼(鋼廠,毫微秒)卻與此將任何nanos湊到1 millicesond :) – user2602807

2

你可以等待的對象,沒有人會通知上...

synchronized (someObjectNobodyWillNotify) { 
    try { 
     someObjectNobodyWillNotify.wait(0, nanosToSleep); 
    } 
    catch (InterruptedException e) { 
     Thread.interrupt(); 
    } 
} 

(在這種情況下,我猜虛假喚醒是好的。如果沒有,則需要在開始記錄您的System.nanoTime()並將wait包裝在一個循環中,以檢查是否已經過足夠的時間。)

1

java.util.concurrent包使用TimeUnit進行計時。 TimeUnit有一個NANOSECONDS字段。

4
Thread.sleep(long millis, int nanos) 

還檢查出this answer與在Windows上的這個問題的細節。