【问题标题】:Timer: period less than a millisecond定时器:周期小于一毫秒
【发布时间】:2012-05-10 22:35:49
【问题描述】:

如题,有没有办法让Timer在毫秒的阈值下工作?

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

【问题讨论】:

标签: java timer


【解决方案1】:

如果你想睡觉,Thread.sleep 有 2 个方法,one of which accepts nanoseconds。如果要安排任务,可以使用ScheduledExecutorServiceschedule 方法也可以使用纳秒。

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

【讨论】:

  • 谢谢,我使用了 Executors.newSingleThreadScheduledExecutor() 并且成功了
  • Thread.sleep(mills, nanos) 的源代码显示只是将任何 nanos 四舍五入到 1 毫松:)
【解决方案2】:
Thread.sleep(long millis, int nanos)

另请查看this answer,了解有关 Windows 上此问题的详细信息。

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2019-01-19
        • 1970-01-01
        • 1970-01-01
        • 2011-10-14
        • 2012-06-08
        • 2015-08-21
        • 1970-01-01
        • 2017-08-17
        • 1970-01-01
        相关资源
        最近更新 更多