首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >系统不能处理纳秒内触发的事件,为什么?

系统不能处理纳秒内触发的事件,为什么?
EN

Stack Overflow用户
提问于 2014-12-03 12:37:28
回答 2查看 255关注 0票数 1

我真的希望就以下各点作出合乎逻辑的解释。我有一个timed task

代码语言:javascript
复制
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将其更改为:

代码语言:javascript
复制
Timer timer = new Timer();
timer.schedule(timedTask, (long) logfile.getFileHash().get(1).getTimeStampInMilli());

控制台在run()方法中显示消息。在我看来,系统无法在纳秒内处理时间,因为它们比系统时钟快。但是,当有一个名为System.nanoTime()的方法时,它是如何实现的,这意味着系统应该能够识别任务从特定的纳米秒开始。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-03 12:40:57

System.nanoTime()上的api文档说:

这种方法提供纳秒精度,但不一定是纳秒分辨率(即值变化的频率)--除了分辨率至少与currentTimeMillis()一样好外,没有任何保证。

因此,JVM可能无法看到小于1毫秒的时间差。

票数 3
EN

Stack Overflow用户

发布于 2014-12-03 13:22:10

我不确定我是否理解了实际的问题,而且在接受的答案中给出的信息就其本身而言似乎是正确的。但是对于Timer.schedule(TimerTask, long)方法,长值是以毫秒为单位的延迟。它不知道或不关心的长是否最初是纳秒数。因为这是十亿分之一秒,而不是千分之一,你将等待许多数量级比如果它是毫秒。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27271956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档