我的线程必须每隔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...。但是我不允许损失一毫秒。
感谢您的回答。