java中的时间同步

2024-02-10

在 for 循环中,我通过检索和处理车辆信息来控制基于模拟步骤的交通模拟器 SUMO。为了确保我的程序“实时”模拟(1 个模拟步骤 = 1 秒),我想在处理阶段之后让我的程序休眠,直到下一个时间步骤开始。为了获得更好的结果,我根据最初采用的参考时间戳来计算时间戳。

循环看起来像这样:

    System.out.println("start of traffic simulation ...");

    for (int i = 0; i < stepCount; i++)
    {
        System.out.println("step: " + i);

        // set before timeStamp
        beforeTimeStamp = System.currentTimeMillis();

        if (firstStep)
        {
            // get reference timeStamp
            referenceTimeStamp = beforeTimeStamp;
            firstStep = false;
        }
        else
        {
            // get next vehicleVector
            vehicleVector = masterControl.traCIclient.simulateStep();
        }

        // process vehicleVector

        // set after timeStamp
        afterTimeStamp = System.currentTimeMillis();

        processingTime = afterTimeStamp - beforeTimeStamp;

        // calculate sleepTime
        sleepTime = referenceTimeStamp + ((i + 1) * 1000) - afterTimeStamp;

       // sleep for sleepTime ms
       Thread.sleep(sleepTime);
    }

    System.out.println("end of traffic simulation ..."); 

这是一些变量的输出:



step:   0                                                                                                         
beforeTimeStamp 1252317242565                                                                                   
reference time: 1252317242565                                                                                   
processing time: 394                                                                                            
test time: 1252317243565                                                                                        
afterTimeStamp 1252317242959                                                                                    
sleepTime: 606                                                                                                  
step: 1                                                                                                         
beforeTimeStamp 1252317242961                                                                                   
processing time: 665                                                                                            
test time: 1252317244565                                                                                        
afterTimeStamp 1252317243626                                                                                    
sleepTime: 939 (exspected: 1000 - 665 = 335)                                                                                                  
  

正如您所看到的,睡眠时间仅对于第一个模拟步骤是正确的。我不知道我在这里会出什么问题。有人有想法吗?

BR,

Markus


You 无法入睡exact使用标准 Java 的时间量这是因为 Java 没有提供关于线程调度的绝对保证。 Java 会受到操作系统分配 CPU 时间的影响,并且您的程序将受到垃圾收集暂停的影响,这是不可预测的。

如果您确实需要可预测的执行,那么您需要查看Java 的实时规范 http://www.rtsj.org/. 这显然是多余的!

您可以使用ScheduledExecutorService in the java.util.concurrent包定期执行任务(通过休眠一段时间,或以特定速率执行)。用法:

import static java.util.concurrent.*

Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(task, 0, 1, TimeUnit.SECONDS)

但这是不准确(参见JavaDoc):

但请注意,由于网络时间同步协议、时钟漂移、或其他因素

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java中的时间同步 的相关文章

  • Java程序中的数组奇怪的行为[重复]

    这个问题在这里已经有答案了 我遇到了这个 Java 程序及其以意想不到的方式运行 以下程序计算 int 数组中元素对之间的差异 import java util public class SetTest public static void
  • 异步多播委托

    我最近在一个广泛使用事件的项目上做了一些工作 我需要做的事情之一是在多播委托上异步调用多个事件处理程序 我认为诀窍是对 GetInvocableList 中的每个项目调用 BeginInvoke 但似乎那里不存在 BeginInvoke 有
  • CXF Swagger2功能添加安全定义

    我想使用 org apache cxf jaxrs swagger Swagger2Feature 将安全定义添加到我的其余服务中 但是我看不到任何相关方法或任何有关如何执行此操作的资源 下面是我想使用 swagger2feature 生成
  • Convert.FromBase64String 方法的 Java 等效项

    Java 中是否有相当于Convert FromBase64String http msdn microsoft com en us library system convert frombase64string aspx which 将指
  • 如何在jsp代码中导入java库?

    我有以下jsp代码 我想添加 java io 等库 我怎样才能做到这一点
  • 如何在多线程C++ 17程序中交换两个指针?

    我有两个指针 pA 和 pB 它们指向两个大的哈希映射对象 当pB指向的哈希图完全更新后 我想交换pB和pA 在C 17中 如何快速且线程安全地交换它们 原子 我是 c 17 的新手 2个指针的原子无等待交换可以通过以下方式实现 inclu
  • 无法理解 Java 地图条目集

    我正在看一个 java 刽子手游戏 https github com leleah EvilHangman blob master EvilHangman java https github com leleah EvilHangman b
  • Clip 在 Java 中播放 WAV 文件时出现严重延迟

    我编写了一段代码来读取 WAV 文件 大小约为 80 mb 并播放该文件 问题是声音播放效果很差 极度滞后 你能告诉我有什么问题吗 这是我的代码 我称之为doPlayJframe 构造函数内的函数 private void doPlay f
  • 检查 Android 手机上的方向

    如何查看Android手机是横屏还是竖屏 当前配置用于确定要检索的资源 可从资源中获取Configuration object getResources getConfiguration orientation 您可以通过查看其值来检查方向
  • 从 android 简单上传到 S3

    我在网上搜索了从 android 上传简单文件到 s3 的方法 但找不到任何有效的方法 我认为这是因为缺乏具体步骤 1 https mobile awsblog com post Tx1V588RKX5XPQB TransferManage
  • Spring Data 与 Spring Data JPA 与 JdbcTemplate

    我有信心Spring Data and Spring Data JPA指的是相同的 但后来我在 youtube 上观看了一个关于他正在使用JdbcTemplate在那篇教程中 所以我在那里感到困惑 我想澄清一下两者之间有什么区别Spring
  • 使用 AWS Java SDK 为现有 S3 对象设置 Expires 标头

    我正在更新 Amazon S3 存储桶中的现有对象以设置一些元数据 我想设置 HTTPExpires每个对象的标头以更好地处理 HTTP 1 0 客户端 我们正在使用AWS Java SDK http aws amazon com sdkf
  • 将多模块 Maven 项目导入 Eclipse 时出现问题 (STS 2.5.2)

    我刚刚花了最后一个小时查看 Stackoverflow com 上的线程 尝试将 Maven 项目导入到 Spring ToolSuite 2 5 2 中 Maven 项目有多个模块 当我使用 STS 中的 Import 向导导入项目时 所
  • 当单元格内的 JComboBox 中有 ItemEvent 时,如何获取 CellRow

    我有一个 JTable 其中有一列包含 JComboBox 我有一个附加到 JComboBox 的 ItemListener 它会根据任何更改进行操作 但是 ItemListener 没有获取更改的 ComboBox 所在行的方法 当组合框
  • 运行 Jar 文件时出现问题

    我已将 java 项目编译成 Jar 文件 但运行它时遇到问题 当我跑步时 java jar myJar jar 我收到以下错误 Could not find the main class myClass 类文件不在 jar 的根目录中 因
  • Android JNI C 简单追加函数

    我想制作一个简单的函数 返回两个字符串的值 基本上 java public native String getAppendedString String name c jstring Java com example hellojni He
  • 将 JTextArea 内容写入文件

    我在 Java Swing 中有一个 JTextArea 和一个 提交 按钮 需要将textarea的内容写入一个带有换行符的文件中 我得到的输出是这样的 它被写为文件中的一个字符串 try BufferedWriter fileOut n
  • java迭代器内部是如何工作的? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个员工列表 List
  • 中断连接套接字

    我有一个 GUI 其中包含要连接的服务器列表 如果用户单击服务器 则会连接到该服务器 如果用户单击第二个服务器 它将断开第一个服务器的连接并连接到第二个服务器 每个新连接都在一个新线程中运行 以便程序可以执行其他任务 但是 如果用户在第一个
  • JAVA - 如何从扫描仪读取文件中检测到“\n”字符

    第一次海报 我在读取文本文件的扫描仪中读取返回字符时遇到问题 正在读取的文本文件如下所示 test txt start 2 0 30 30 1 1 90 30 0 test txt end 第一行 2 表示两个点 第二行 位置索引 0 xp

随机推荐

  • Scala 2.13 视图与 LazyList

    我正在将一个项目从 Scala 2 12 1 迁移到 2 13 6 并发现SeqView flatMap现在返回一个View 其中没有distinct方法 因此 我有一段代码不再编译 val nodes debts view flatMap
  • 如何以正确的类型安全方式迭代记录键?

    让我们针对一些属性构建一个示例记录 type HumanProp weight height age type Human Record
  • 如何获取光标下的单词?

    假设有一个mousestop事件附加到整个文档 找出确切事件的最佳方法是什么word当鼠标停止移动时 在光标下方 如果有任何文本 我可以从事件处理程序获取底层 jQuery 元素 document elementFromPoint e cl
  • MATLAB:在子图中绘制/保存网格函数的 X-Y 视图

    正如标题所示 我试图将网格函数的 2 变量切片 例如 作为 jpg 保存为子图 我想使用 m 文件来执行此操作 因为我有很多要生成的图 我已经弄清楚如何在他们自己的图形上绘制视图 但我无法让它们正确地绘制为图形中的子图 为了说明我的意思 以
  • 绘制包含 80% (x, y) 点的圆

    我有一个二维数组 x y 的点 我想绘制一个包含该点 80 的圆 并且我想知道所得圆的半径 有没有办法用 python 来做到这一点 我一直在寻找一种方法来做到这一点 但没有成功 我很抱歉没有尝试 但我完全迷失了在不给圆半径的情况下取 80
  • 进程何时处理信号

    我想知道linux进程什么时候处理信号 假设进程已经安装了信号的信号处理程序 我想知道进程的正常执行流程何时会被中断并调用信号处理程序 根据http www tldp org LDP tlk ipc ipc html http www tl
  • 访问实例变量的语法? (目标-C)

    在 Objective C 中访问实例变量的正确语法是什么 假设我们有这个变量 interface thisInterface UIViewController NSMutableString aString property nonato
  • 与D3的关系图

    如何使用 D3 创建以下图表 我不知道这种类型的可视化的名称 我能找到的最接近的是 力导向 图 图例 填充的节点是人 非填充的节点是属性 例如最喜欢的颜色 这是我的版本 http jsfiddle net doraeimo JEcdS em
  • Python win32com“参数数量无效”

    我正在尝试使用 win32com 使用以下代码将多个 xlsx 文件转换为 xls import win32com client f r input xlsx xl win32com client gencache EnsureDispat
  • iOS 应用程序上的自定义字体 - 在模拟器中工作但不适用于 iPad

    在这里遇到一个奇怪的问题 我正在为我的学校项目 非商业 开发一个游戏 并且我正在使用自定义字体黑法院 http www dafont com black chancery font 根据 GNU GPL 免费 我遵循了多个来源的说明 其中包
  • Word 2016 for Mac 中的 CreateObject(“Excel.Application”)

    我有 Word 2016 VBA 代码来读取 Excel 文档中的数据 这适用于 Windows 平台 Windows 7 和 Windows 10 在 Mac 上 它失败了CreateObject Excel Application 操作
  • 子查询和相关子查询的区别

    下面的 SQL 查询是普通查询还是相关子查询 SELECT UserID FirstName LastName DOB GFName GLName LoginName LoginEffectiveDate LoginExpiryDate P
  • SqlBulkCopy,用引号引起来的字符串变量

    当尝试批量复制到 ASP NET MVC 项目中的 SQL Server 数据库时 我收到此错误 数据源中 String 类型的给定值无法转换为指定目标列的 nvarchar 类型 我查看了类似的问题 发现 1 帮助我查明了我的问题 c 无
  • Service Worker 不会缓存 Manifest start_url

    我正在使用 Lighthouse 来审核我的网络应用程序 我正在克服失败 但我坚持这一点 失败 Service Worker 未缓存 Manifest start url In my manifest json I have start u
  • 获取 RGB 颜色并使用 iPhone 上的 UIColor 对其进行标准化

    我正在寻找一种直接的方法来从 RGB 转换颜色 从 Photoshop 等工具中获取它 然后将其转换为 UIColor 由于 UIColor 对每个颜色空间使用 0 0 到 1 0 的标准化色域 因此我不确定这是如何完成的 感谢您的解决方案
  • 求圆上任意弧的长度

    我有一个有趣的 无论如何对我来说 问题 我正在 OpenServo org for V4 上工作 我正在尝试确定行进弧的长度及其方向 我有一个磁性编码器 可以返回从 0 到 4095 的轴位置 伺服系统有两个逻辑终点 称为 MAX 和 MI
  • 如何使用 JPA 和 Hibernate 映射组合键?

    在此代码中 如何为组合键生成 Java 类 how to composite key in hibernate create table Time levelStation int 15 not null src varchar 100 n
  • pthread_cond_timedwait 立即返回

    我有一个奇怪的问题 我有以下代码 dbg condwait timeout d d n abs timeout gt tv sec abs timeout gt tv nsec ret pthread cond timedwait q gt
  • Spring JavaMailSenderImpl:在哪里设置字符集?

    如果您使用 Spring JavaMailSenderImpl 您在哪里定义发送邮件所用的字符集 我们将 Spring JavaMailSenderImpl 与从 Websphere Application Server 6 1 获得的邮件
  • java中的时间同步

    在 for 循环中 我通过检索和处理车辆信息来控制基于模拟步骤的交通模拟器 SUMO 为了确保我的程序 实时 模拟 1 个模拟步骤 1 秒 我想在处理阶段之后让我的程序休眠 直到下一个时间步骤开始 为了获得更好的结果 我根据最初采用的参考时