gpt4 book ai didi

java - 不使用系统时间的NTP服务器

转载 作者:行者123 更新时间:2023-12-02 04:53:59 25 4
gpt4 key购买 nike

我有一台没有互联网连接或 GPS 接收器的台式电脑。我需要构建一个NTP服务器应用程序,最好是用JAVA,而不使用系统时间。

我使用了以下方法。

public void run() 
{
Date oDate = new Date();
time = oDate.getTime();

System.out.println("Syst Time--->"+oDateFormat.format(time));
while(true)
{
try
{
Thread.sleep(100);
time = time+100;
oDate = new Date();
if(time % 11443 == 1)
{
System.out.println("Time--->"+oDateFormat.format(time)+" Syst Time--->"+oDateFormat.format(oDate));
oDate = null;
}
}
catch (InterruptedException ex)
{
Logger.getLogger(NTPServer.class.getName()).log(Level.SEVERE, null, ex);
}
}
}

我正在做的是有一个线程 hibernate 100 毫秒,然后我将 100 添加到 time 变量中以保留我的时间。但每次打印时都会与系统时间产生2-3秒的差异。基本上它不准确。

还有别的办法吗?

最佳答案

使用Thread.sleep(100);无法确保循环每 100 毫秒精确执行一次。至少有两件事需要考虑:

  • 您在调用 Thread.sleep(100) 之间执行的代码本身需要时间来执行。
  • Thread.sleep(100)不 hibernate 正好 100 毫秒,但它至少 hibernate 100 毫秒。当你的程序在 Thread.sleep() 之后真正继续时未定义,取决于实现定义的方面,例如 VM 调度程序和操作系统调度程序。

在具有非确定性计时行为的环境中,软件无法测量时间。不确定的计时行为是由调度程序、缓存、多任务、多线程、硬盘等引起的。

您必须依赖系统时间,使用 System.currentTimeMillis()System.nanoTime() .

关于java - 不使用系统时间的NTP服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28961079/

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