【问题标题】:While loop with small Thread.Sleep vs. Java Timer?While 循环与小 Thread.Sleep 与 Java 计时器?
【发布时间】:2017-02-25 07:24:11
【问题描述】:

我有一个程序需要在非常精确的时间执行一个进程。我目前接近它的方式是:

while( ( exTime - System.currentTimeMillis() ) > randomNum )
{
    try
    {
        Thread.sleep(0, 5000); //Sleep for 5000 nanoseconds, or 0.000005 seconds
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
}
//Code to be executed after time is over.

我知道也可以为此使用 Java 计时器。

我的问题是什么是最有效的,什么是最准确的?我正在使用 while 循环运行 100 多个线程。使用计时器会节省更多资源并更准确吗?

【问题讨论】:

  • 这里的“非常精确”有多精确?请记住,System.currentTimeMillis 的精度可能只有 15 毫秒左右。尝试以 5000ns 的增量睡眠似乎毫无意义……
  • 尽可能精确。是否可以精确到 0ms 和一些 ns?
  • 不适用于System.currentTimeMillis。如果您尝试测量相对时间,则应改用System.nanoTime
  • 好的,谢谢。将 while 循环与 Timer 进行比较呢?
  • 我怀疑计时器的分辨率会低得多。但是为什么不自己测试一下呢?

标签: java multithreading timer


【解决方案1】:

使用计时器将是准确的。对于资源,您可以查看

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-04
    • 2020-10-24
    • 2012-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-13
    相关资源
    最近更新 更多