线程睡眠过多

时间:2019-04-01 23:32:58

标签: java thread-sleep milliseconds

我的线程必须每隔5秒执行一次工作。我捕获开始时间和结束时间,并从间隔中减去它。我不明白问题出在哪里。代码:

@Override
public void run() {
    SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss.SSS");
    try {
        while (true) {
            long start = System.currentTimeMillis();
            Date currentDateTime = new Date(start);
            supervision(sdf, currentDateTime);
            long duration = System.currentTimeMillis() - start;
            Thread.sleep(5000 - duration);
        }
    } catch (InterruptedException e) {
    }
}

这就是我得到的:
02.04.2019 01:04:58.610
02.04.2019 01:05:03.613
02.04.2019 01:05:08.623
02.04.2019 01:05:13.634
02.04.2019 01:05:18.650
02.04.2019 01:05:23.652
。 。 。
问题以毫秒为单位。如您所见,在第一个间隔中,我损失了3毫秒,然后损失了10、11...。但是我不允许损失一毫秒。 感谢您的回答。

0 个答案:

没有答案