[英]Is javax.swing.timer's interval constant?
在javax.swing.Timer
,我们可以这样设置时间间隔 :
int delay = 1000; //update every 1000 millisecond
Timer t = new Timer(delay, listener);
有了以上内容,我希望每个间隔之间的时间延迟为1000
毫秒。 但是,当我在Swing应用程序中使用它时,每个时间间隔的延迟是1014 to 1015
。
当我将延迟设置为1
。 测试的延迟为每个间隔15 to 16
毫秒。
关于上述Timer行为,我有两个问题:
问题1 :是什么导致我的间隔增加了14 to 15
毫秒? 是运行Swing应用程序所需的“开销”吗?
问题2 :是否可以保证在Timer构造函数或timer.setDelay()
所说的时间延迟? 我问这个问题是因为我知道Thread.sleep(delay)
不能保证,并且会随范围而变化。 那么, javax.swing.Timer
呢?
计时器使用由操作系统实现的睡眠操作。 在Windows上运行32位应用程序时,它使用Win XP仿真器,其运行方式与在Windows XP上相同。
如果您使用64位JVM,它将利用OS时钟的改进,则它应以1毫秒的分辨率运行。
注意:Java 5.0中添加的ExecutorService
使用System.nanoTime()
和LockSupport.parkNanos(n)
,使用高分辨率时钟时应该不会出现此问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.