我真的希望就以下各点作出合乎逻辑的解释。我有一个timed task
static TimerTask timedTask = new TimerTask() {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("timed task");
}
};
Timer timer = new Timer();
timer.schedule(timedTask, (long) logfile.getFileHash().get(1).getTimeStampInNano());当我运行该代码时,控制台中没有显示任何内容,但wen将其更改为:
Timer timer = new Timer();
timer.schedule(timedTask, (long) logfile.getFileHash().get(1).getTimeStampInMilli());控制台在run()方法中显示消息。在我看来,系统无法在纳秒内处理时间,因为它们比系统时钟快。但是,当有一个名为System.nanoTime()的方法时,它是如何实现的,这意味着系统应该能够识别任务从特定的纳米秒开始。
发布于 2014-12-03 12:40:57
System.nanoTime()上的api文档说:
这种方法提供纳秒精度,但不一定是纳秒分辨率(即值变化的频率)--除了分辨率至少与currentTimeMillis()一样好外,没有任何保证。
因此,JVM可能无法看到小于1毫秒的时间差。
发布于 2014-12-03 13:22:10
我不确定我是否理解了实际的问题,而且在接受的答案中给出的信息就其本身而言似乎是正确的。但是对于Timer.schedule(TimerTask, long)方法,长值是以毫秒为单位的延迟。它不知道或不关心的长是否最初是纳秒数。因为这是十亿分之一秒,而不是千分之一,你将等待许多数量级比如果它是毫秒。
https://stackoverflow.com/questions/27271956
复制相似问题