Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 系统无法处理纳秒触发的事件,为什么?_Java_Timer_Timertask_Nanotime - Fatal编程技术网

Java 系统无法处理纳秒触发的事件,为什么?

Java 系统无法处理纳秒触发的事件,为什么?,java,timer,timertask,nanotime,Java,Timer,Timertask,Nanotime,我真的在寻求关于以下内容的合乎逻辑的解释。我有一个定时任务 当我运行该代码时,控制台中没有显示任何内容,但我将其更改为: Timer timer = new Timer(); timer.schedule(timedTask, (long) logfile.getFileHash().get(1).getTimeStampInMilli()); 控制台在run方法中显示消息。在我看来,系统无法以纳秒为单位处理时间,因为它们比系统时钟快。但是,如果有一种称为System.nanoTime的方法,

我真的在寻求关于以下内容的合乎逻辑的解释。我有一个定时任务

当我运行该代码时,控制台中没有显示任何内容,但我将其更改为:

Timer timer = new Timer();
timer.schedule(timedTask, (long) logfile.getFileHash().get(1).getTimeStampInMilli());
控制台在run方法中显示消息。在我看来,系统无法以纳秒为单位处理时间,因为它们比系统时钟快。但是,如果有一种称为System.nanoTime的方法,这意味着系统应该能够识别任务从特定的纳秒开始,这是怎么可能的。

上的api文档说明:

该方法提供纳秒精度,但不一定 纳秒分辨率,即值变化的频率-否 作出保证,但决议至少与 那是currentTimeMillis的

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

上的api文档说明:

该方法提供纳秒精度,但不一定 纳秒分辨率,即值变化的频率-否 作出保证,但决议至少与 那是currentTimeMillis的


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

我不确定我是否理解实际问题,并且公认答案中给出的信息就其本身而言是正确的。但是对于Timer.scheduleTimerTask,long方法,long值是以毫秒为单位测量的延迟。它不知道也不关心长时间最初是否是纳秒数。由于这是十亿分之一秒而不是千分之一秒,因此,与毫秒相比,等待的时间要长很多数量级。

我不确定我是否理解实际问题,并且公认答案中给出的信息就目前而言是正确的。但是对于Timer.scheduleTimerTask,long方法,long值是以毫秒为单位测量的延迟。它不知道也不关心长时间最初是否是纳秒数。因为这是十亿分之一秒而不是千分之一秒,所以与毫秒相比,等待的时间要长很多数量级。

我认为你解决了问题;由于纳米时间所涉及的数字要大得多,OP根本没有等待足够长的时间……问题是,即使代表日期的毫秒值也会造成比任何人都可能等待的时间更长的延迟。但我不知道long是否代表了这一点,我从方法名的getTimeStamp部分推断出来。现在我再次查看原始问题,是否有人编辑了内容,OP希望任务在特定时间开始。因此,应该有人告诉他不要把自己的价值看得太久,这需要一次约会;由于纳米时间所涉及的数字要大得多,OP根本没有等待足够长的时间……问题是,即使代表日期的毫秒值也会造成比任何人都可能等待的时间更长的延迟。但我不知道long是否代表了这一点,我从方法名的getTimeStamp部分推断出来。现在我再次查看原始问题,是否有人编辑了内容,OP希望任务在特定时间开始。因此,应该有人告诉他不要将其值强制转换为long,它需要是一个日期。这并不能回答问题,这是关于提供纳秒作为参数,函数期望毫秒。这并不能回答问题,这是关于提供纳秒作为参数,函数预期毫秒。
Timer timer = new Timer();
timer.schedule(timedTask, (long) logfile.getFileHash().get(1).getTimeStampInMilli());