2012-05-10 189 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上的这个问题的细节。