Java - 创建内部时钟

2024-01-08

我希望计算从Java中的特定时间开始经过的时间(以毫秒为单位)。

经典的使用方式System.currentTimeMillis();作为开始时间,然后再次将其与前一个时间一起使用来获取经过的时间。我希望做类似的事情,但不依赖系统时间。

如果我依赖系统时间,程序的用户就可以操纵系统时钟来破解程序。

我尝试使用类似于以下的代码:

int elapsed = 0;
while (true) {
    Thread.sleep(10);
    elapsed += 10;
}

这可行,但在计算机滞后然后锁定一两秒的情况下,它不太可靠。

有人有什么想法吗?


你想利用System.nanoTime。它与系统时钟无关。它只能用于跟踪相对时间,这似乎就是您想要做的。

为了防止这个答案只是另一个答案的链接,这里有一个简短的解释。

来自文档

公共静态长nanoTime()返回最大的当前值 精确的可用系统计时器,以纳秒为单位。

This method can only be used to measure elapsed time and is not related to any other notion of system or wall-clock time. The value returned represents nanoseconds since some fixed but arbitrary time (perhaps in the future, so values may be negative). This method provides nanosecond precision, but not necessarily nanosecond accuracy. No guarantees are made about how frequently values change. Differences in successive calls that span greater than approximately 292 years (263 nanoseconds) will not accurately compute elapsed time due to numerical overflow.

计时器信息的另一个链接:https://blogs.oracle.com/dholmes/entry/inside_the_hotspot_vm_clocks https://blogs.oracle.com/dholmes/entry/inside_the_hotspot_vm_clocks

您可以使用 Java 的 Timer 类以某个特定精度(假设每 500 毫秒)生成一个“检查”回调。此回调不会用于确定 500ms 确实过去了。你会打电话System.nanoTime在回调中并将其与您上次调用的时间进行比较System.nanoTime。无论挂钟如何变化,这都会为您提供相当准确的过去时间量表示。

你可以在这里看看:System.currentTimeMillis 与 System.nanoTime https://stackoverflow.com/questions/351565/system-currenttimemillis-vs-system-nanotime

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

Java - 创建内部时钟 的相关文章

  • 外部硬件指纹扫描仪和 Android 设备集成

    我想建立一个android像员工考勤这样的应用程序使用fingerprint scanner 我想知道 是否可以使用外部硬件设备进行指纹识别 扫描 如何将Android应用程序与外部硬件finger集成 打印扫描设备 如何从外部硬件设备获取
  • 编写潜在并发问题的证明

    我正在阅读 Java 并发实践 并尝试编写一段代码来表明第 3 5 1 章中作为示例提供的类确实会引入问题 public class Holder public int n public Holder int n this n n publ
  • 使用祖父母接口的默认方法

    我完全不明白为什么这行不通 interface Test default void doMagic System out println Abracadabra class TestImpl implements Test class Sp
  • Java 中的 sscanf 等效项[重复]

    这个问题在这里已经有答案了 可能的重复 用于使用已知模式解析字符串中的值的 sscanf 的 Java 等效项是什么 https stackoverflow com questions 8430022 what is the java eq
  • 用于将字符串与预定义字符混合/混淆的简单算法

    我有一个字符串如下 它的长度是10 它代表基数 36 因此包含数字和大写字母 字符串的来源是数据库生成的序列 即从 1 及以上 正在转换为基数 36 我的问题是转换为base 36转换的结果也是连续 顺序的 例如 ID 1402 gt 00
  • 为什么需要使用java.util.TimerTask的purge()?

    Timer cancel 取消任务 Timer purge 从此计时器的任务队列中删除所有已取消的任务 如果我不在这里使用 purge 会发生什么 当计时器的任务队列已满时会发生什么 除非您正在运行的计时器数量过多 否则实际计时器行为不会发
  • Java:计算字符串中字母的出现次数

    我正在尝试编写一个程序来计算字符串中字母的出现次数 例如 如果用户输入 Java 则会显示 j 1 a 2 v 1 但是 我的程序似乎有问题 当我输入 java 这个词时 它显示的是 j 0 a 1 v 0 Scanner myScanne
  • JAXB、Marshal 的问题 - 无法封送类型“java.lang.String”

    当我运行 marshal 操作时 出现以下错误 javax xml bind MarshalException with linked exception com sun istack internal SAXException2 unab
  • Netflix Archaius 动态配置

    我正在将 Hystrix 集成到现有项目中 并且希望从 xml 文件中读取配置值 而不是使用配置管理器提供配置属性 当 xml 文件中的值更新时 我希望 Hystrix 配置在运行时更新 这是我遵循的指南 https github com
  • 使用 python 中的 java 库

    我有一个 python 应用程序和 java 应用程序 python 应用程序为 java 应用程序生成输入并在命令行上调用它 我确信一定有一个更优雅的解决方案 就像使用 JNI 从 Java 调用 C 代码一样 有什么指点吗 仅供参考 我
  • 计时器显示负的已用时间

    我正在使用一个非常简单的代码来计算每个循环的时间for陈述 它看起来像这样 import time for item in list of files Start timing this loop start time clock Do a
  • 正则表达式的替代(流畅?)界面设计

    我刚刚看到了一个巨大的 Java 正则表达式 这让我对正则表达式的一般可维护性进行了一些思考 我相信大多数人 除了一些糟糕的 Perl 贩子 都会同意正则表达式很难维护 我正在考虑如何解决这种情况 到目前为止 我最有希望的想法是使用流畅的界
  • Spring Boot,使用 EhCache 进行缓存

    我需要在我的应用程序中缓存一些数据 我正在考虑使用 Ehcache 我有几个问题 Ehcache需要另外一台服务器吗 我需要其他客户端来使用 Ehcache 吗 Ehcache 如何与多个实例配合使用 是否有可能使用 Ehcache 创建类
  • 如何为我的数独游戏制作 GUI? (摇摆)

    到目前为止 我已经编写了生成随机 9x9 数独网格的代码 我是Java的初学者 所以我有一些关于如何做UI的问题 显示数字的最佳方式是什么 我尝试创建 81 个 JTextFields 这非常乏味 而且我确信有一种有效的方法可以做到这一点
  • 将 JAR 文件打包为 WAR 文件

    我有一系列依赖的Java项目 我想将它们打包成一个 JAR 文件 以便在我的 WAR 文件中使用 这些项目依赖于大量的外部库和项目 如log4j apache commons等 我选择 Eclipse 中的所有项目并导出为 JAR 文件 然
  • Cordova Android 应用程序中的网页不可用

    编辑 我一直在解决这个问题并回顾我的所有步骤 我很乐意缩小这个问题的规模 并在令人困惑的情况下获得更多确切的细节 目前 我觉得 Keycloak 似乎只想将我重定向到 https 据我所知 这应该是 Wildfly 服务器配置问题 编辑 我
  • java POI XSSF 公式评估器

    我在保存新的 Excel 文件时遇到问题 我希望当它被保存时 公式会自行计算 但目前它只是返回 Excel 文件中的一个字符串 公式是正确的 我不知道到底要得到FormulaEvaluator上班 这是我输入返回字符串的公式的地方 data
  • Android 布局崩溃

    I use a XWalkView https crosswalk project org 加载网页和视频查看器 https github com Bilibili ijkplayer在我的应用程序中播放实时视频 我希望 IjkVideoV
  • 确定方法调用顺序的接口设计模式

    我想创建一个具有多种方法的 Java 接口 但我希望界面的用户只能按照我定义的顺序或顺序调用方法 例如buyTicket 不应在此之前调用reserveTicket 问 有没有设计模式或任何关于如何做到这一点的提示 我考虑过 A 接口被包装
  • 我可以在方法体内使用注释吗?

    允许 Java 注释的语义将它们放置在某处在函数体内 例如注释特定的函数调用 语句或表达式 例如 class MyClass void theFunc Thing thing String s null Catching NullPoint

随机推荐

  • 关闭 PDO 语句

    我最近决定从 MySQLi 跳到 PDO 但有一些关于 PDO 准备好的语句的问题困扰着我 在 MySQLi 中 我会编写一个典型的获取查询 如下所示 db new mysqli localhost user pass mydb sql S
  • getBoundingClientRect() 在 XUL 中返回零

    我的 Firefox 扩展有问题 我有一个 XUL 弹出面板 其中包含用于标签云的 hbox 以及用于将 div 添加到此 hbox 的 JS 代码
  • BigQuery 日期分区视图

    BigQuery 允许您创建日期分区表 https cloud google com bigquery docs creating partitioned tables https cloud google com bigquery doc
  • 在 Google 地图中使用 3D

    我想创建一个 web 应用程序 我可以在其中显示我自己的 geotiffs NDVI 和其他数据层以及 3D 几何图形 提供 2D 图块和纹理 3D 形状的无缝渲染 就像maps google com 在中实现的那样从 地图 视图切换到 地
  • 验证失败时重新填充单选按钮

    我有一个从数据库中提取数据的表单 如果它是一个输入框 代码可以正常工作 但我无法获取单选按钮的最新 POST 数据 这适用于输入文本框 我在第一次加载时获得从数据库中提取的默认值 并且我可以从用户在验证失败时修改输入框获得新的输入 如果有
  • 如何使用SAX PARSER解析android中的html内容

    xml中有描述标签 它包含 html 标签 我在android中使用SAX解析器来解析 但是 当它从描述标签获取数据时 它不会获取 html 内容 也不会获取任何标签 那么我如何解决使用 SAX 解析器从 XML 解析 html 内容的问题
  • 当相机之间的角度太大时,OpenCV 立体图像校正无法正常工作

    我想收集位于两个摄像机焦点处的身体的高度数据 这就是我的立体声设置的样子 当我使用标准 cv2 函数计算图像的校正版本时 它看起来非常糟糕 当我对相机并行使用类似的设置时 它起作用了 我计算了外线 它们似乎是正确的 However the
  • 需要帮助重写 WPF 按钮样式背景颜色。

    我为自定义按钮设置了以下代码 但我想更改单个按钮的背景
  • Phonegap/ios7 - 重新加载时未触发 deviceready 事件

    我们的 Phonegap 混合应用程序在首次加载时工作正常 在这种情况下 很明显 deviceready 事件正确触发并且应用程序启动 没有问题 我们需要在某个时候重新加载应用程序 我们只需对index html 主应用程序html 文件
  • 在容器创建时设置docker镜像用户名?

    我有一个 OpenSuse 42 3 docker 映像 已将其配置为运行代码 该映像有一个名为 myuser 的用户 root 除外 该用户是我在初始映像生成过程中通过 Dockerfile 创建的 我有三个脚本文件 它们根据用户所在的操
  • jquery循环遍历json

    您好 我正在尝试循环遍历 json 文件 如下所示 each data playlists playlist function i item contentC append p item id p contentC append p ite
  • React .setState() 中的展开运算符

    给出从 React 类组件中提取的以下代码片段 constructor props super props this state active true deactivate gt this setState this state acti
  • bat 文件脚本检查字符串是否包含其他字符串

    我需要编写一个批处理文件来检查变量是否包含特定值 我尝试执行以下操作 If a a pattern echo Yes else echo No 输入示例 a 鲍勃 宾森 pattern 宾森 我从来没有打印过 是 谁能告诉我我错过了什么 或
  • 有效计算笛卡尔积中总和高于特定数字的集合

    我有以下可以运行的 Python 3 代码 import itertools loops 10 results 4 2 75 2 75 1 5 1 5 1 5 0 threshold loops 2 cartesian product it
  • PHP/PDO/MSSQL如何获取错误信息?

    我做了很多搜索 但找不到任何关于我的问题的信息 我在用着PDO带司机PDO DBLIB访问 MS SQL 数据库 我通常使用准备好的语句 但如果任何查询失败 我不会获得有关该错误的任何其他信息 除了 General SQL Server e
  • MySQL SELECT INTO 等效吗?

    在 SQL Server 中 我可以使用以下命令将表或临时表复制到新表 SELECT INTO syntax 有人知道如何在 MySQL 中执行相同的操作吗 See 创建表 作为选择 http dev mysql com doc refma
  • 按行数设置 TableView 高度

    我有TableView in the MainstoryBoard并且行数每次都是随机的 我想要整体的高度TableView灵活 我的意思是 例如 如果我有 4 行TableView和每个TableView行高是 22 所以TableVie
  • 为什么 JSON.parse 会抛出跨域错误?

    如果没有 JSON parse 以下代码可以正常工作 如果我尝试解析或字符串化我的数据对象 我会收到跨源错误 为什么会发生这种情况以及如何解决它 我在 Title js 中有以下代码 const name show title JSON p
  • EF 6 参数嗅探

    我有一个动态查询太大 无法放在这里 可以肯定地说 在其当前形式中 它利用 CLR 过程根据传递的搜索参数数量动态构建联接 然后获取该结果并将其联接到更详细的表中 以带回对最终用户重要的属性 我已将整个查询转换为 LINQ to Entiti
  • Java - 创建内部时钟

    我希望计算从Java中的特定时间开始经过的时间 以毫秒为单位 经典的使用方式System currentTimeMillis 作为开始时间 然后再次将其与前一个时间一起使用来获取经过的时间 我希望做类似的事情 但不依赖系统时间 如果我依赖系