所以我有这个简单的线程,它以每秒的新时差更新我的TextBox。

try {
        Thread.sleep(1000);
    } catch(InterruptedException ex) {
        Thread.currentThread().interrupt();
    }

    editTextBox.setText(""+timeDifference);


但是我希望TextBox更新更快,但保持相同的值。所以我的想法是将睡眠值减少到现在的一半(250),并保持输出不变,我也会将输出减少1/4,结果是:

try {
        Thread.sleep(250);
    } catch(InterruptedException ex) {
        Thread.currentThread().interrupt();
    }

    editTextBox.setText(""+timeDifference/4);


但是,第二个示例的输出落后大约10%。为什么是这样?我的进程的计算是否需要花费超过250ms的时间,这就是为什么要落后呢?

提前致谢

最佳答案

Thread.sleep(250)并不意味着您的线程将在250 ms之后再次开始执行。

当您休眠线程时,其状态将传递到idle。当sleep结束时,它传递到active,这意味着可以执行,但是调度程序可能正在忙于执行另一个线程(甚至在此之前选择其他线程来执行)。

再加上重新执行线程(环境更改)和可能的计时错误所需的时间,您将有延迟。大多数变化虽然不是恒定的,但与睡眠时间无关,因此,当睡眠时间小时,差异较大。

最后,请记住,Java不是实时系统,因此您不能指望时间遵循严格的“时间表”(因为缺少更好的单词)。

10-06 13:36
查看更多