在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毫秒。
关于上述计时器行为,我有两个问题:
Q1:是什么导致将额外的14 to 15毫秒添加到我的间隔中?这是运行Swing应用程序所需的“开销”吗?
Q2:时间延迟会像我们在计时器构造函数或timer.setDelay()中所说的那样得到保证吗?我之所以这样问,是因为我知道Thread.sleep(delay)中的延迟是不能保证的,而且它会随着范围的不同而变化。那么,javax.swing.Timer呢?
发布于 2016-03-08 18:58:13
定时器使用由操作系统实现的睡眠操作。当您在Windows上运行32位应用程序时,它使用的是Win XP仿真器,它的工作方式与在Windows上的工作方式相同。
如果您使用64位JVM (它将利用操作系统时钟的改进),那么它应该以100秒的分辨率运行。
注意:Java5.0中添加的ExecutorService使用System.nanoTime()和LockSupport.parkNanos(n),在使用高分辨率时钟时不会出现这个问题。
https://stackoverflow.com/questions/32888397
复制相似问题