gpt4 book ai didi

java - 日期在java应用程序中回流

转载 作者:行者123 更新时间:2023-11-30 05:52:08 25 4
gpt4 key购买 nike

我在线程中使用了日期。

但有时,日期会倒流。

这是示例代码。

private class Test extends Thread
{
private DateFormat _dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");

public Test()
{
// Start Thread
}

private void Print(Date date)
{
System.out.println("<TIME>" + _dateFormat.format(new Date()) + "");
}

public void run()
{
// Works In Thread.
Print(new Date());
Print(new Date());
}
}

这有什么问题吗?

结果:

<TIME>2018-11-13 05:02:16.860</TIME>
<TIME>2018-11-13 05:01:58.235</TIME>

最佳答案

Date 使用 System.currentTimeMillis() ,它使用您的“挂钟”。该挂钟不保证单调递增,而是进行调整以匹配它可以访问的互联网上的最佳时钟,例如通过 NTP。

16 秒是一个相当大的时间跳跃,所以我会看看你的 NTP 是如何设置的。通常,NTP 会尝试平滑其更正,但它可能会被迫立即跳转到特定时间。

注意:虽然线程之间的竞争条件可能会导致此行为,但不太可能导致像这样的 16 秒时间跳跃。

要解决竞争条件,您可以锁定 System.out 以确保不会同时尝试写入输出。

private void printTime() {
synchronized(System.out) {
System.out.println("<TIME>" + _dateFormat.format(new Date()) + "</TIME>");
}
}

关于java - 日期在java应用程序中回流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53719983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com