java秒表程序-同时使用System.nanoTime()和TimerTask

java秒表程序-同时使用System.nanoTime()和TimerTask,java,timertask,Java,Timertask,我正在用Java编写一个小型程序,用作秒表,但我不确定在效率和准确性方面是否使用了正确的方法 从我在stackoverflow上读到的内容来看,System.nanoTime()似乎是测量时间流逝的最佳方法。是这样吗?在多大程度上精确到最接近的纳秒、微秒、毫秒等 另外,当我的秒表运行时,我希望它显示每秒经过的当前时间。为此,我计划使用TimerTask并将其计划为每秒报告时间(转换为秒)。 这是最好的方式吗?这会对准确性产生影响吗 最后,在我目前的设计中,这会占用大量计算机资源,例如处理时间 P

我正在用Java编写一个小型程序,用作秒表,但我不确定在效率和准确性方面是否使用了正确的方法

从我在stackoverflow上读到的内容来看,System.nanoTime()似乎是测量时间流逝的最佳方法。是这样吗?在多大程度上精确到最接近的纳秒、微秒、毫秒等

另外,当我的秒表运行时,我希望它显示每秒经过的当前时间。为此,我计划使用TimerTask并将其计划为每秒报告时间(转换为秒)。 这是最好的方式吗?这会对准确性产生影响吗

最后,在我目前的设计中,这会占用大量计算机资源,例如处理时间


PS抱歉,现在无法共享太多代码,因为我刚刚开始设计它。我只是不想浪费时间在一个效率低下、计时器不准确的设计上。

是的,您可以使用
java.util.timer
TimerTask
定期运行并每秒更新视图。然而,我不认为你必须处理nono秒,而实际上你只需要秒的分辨率。使用常规的
System.currentTimeMillis()

非常感谢。只是想澄清一下,如果我是根据我第一次调用System.nanoTime()的时间来计算时间,那么我如何使用System.currentTimeMilis()?是否还需要使用System.currentTime()以毫秒为单位创建单独的开始时间?再次感谢如果我正确理解了你的任务,你只需要创建一个计时器任务,它会更新你的视图。然后创建一个全局
计时器
,并将此任务安排为每秒运行一次。任务应该使用例如
System.currentTimeMillis()
检索当前时间并更新视图。既然纳秒至少与currentTimeMillis一样精确,为什么不使用纳秒呢?(此方法提供纳秒精度,但不一定是纳秒分辨率(即值变化的频率)-除分辨率至少与currentTimeMillis()的分辨率一样好外,不作任何保证。)