【发布时间】: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