7

正如标题,有没有办法让定时器在毫秒的阈值下工作?

我的问题与以下问题类似,但它适用于 Java: Thread.Sleep for less than 1 ms

4

4 回答 4

11

如果你想睡觉,Thread.sleep有 2 种方法,其中一种接受 nanoseconds。如果你想安排一个任务,你可以使用ScheduledExecutorService哪些schedule方法也可以使用纳秒。

正如@MarkoTopolnik 所解释的,结果很可能不会精确到纳秒。

于 2012-05-10T14:30:40.000 回答
4
Thread.sleep(long millis, int nanos)

另请查看此答案,详细了解 Windows 上的问题。

于 2012-05-10T14:33:11.980 回答
2

您可以等待没有人会通知的对象...

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

(在这种情况下,我猜虚假唤醒是可以的。如果不是,您需要System.nanoTime()在开始时记录您的并将其包装wait在一个循环中,以检查是否已经过了足够的时间。)

于 2012-05-10T14:32:11.917 回答
1

java.util.concurrent 包使用TimeUnit进行计时。TimeUnit 有一个 NANOSECONDS 字段。

于 2012-05-10T14:32:26.363 回答