java小知识-纳秒(纳秒等于多少)

createh53个月前 (02-01)技术教程20

作者:京东物流 崔冬冬

一、System.nanoTime()

java中,有这么一个方法System.nanoTime(),你用过吗?

二、与System.currentTimeMillis()对比

System.currentTimeMillis()我们经常使用,可以参考对比一下

看方法意思,一个是纳秒,一个是毫秒,二者有关系吗?

先看看单位换算:一秒=1000毫秒 1毫秒=1000微秒 1微秒=1000纳秒

那么1毫秒=1000000纳秒,二者是不是这样的倍数关系?

带着疑问,我们本地打印测试一下

System.out.println("毫秒="+System.currentTimeMillis());
System.out.println("纳秒="+System.nanoTime());
输出:
毫秒=1729763507201
纳秒=257832682992

很显然,不是 1:1000000的关系,具体是什么呢?

三,方法解释

看一下源码中的方法解释

Returns the current value of the running Java Virtual Machine's high-resolution time source, in nanoseconds. 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 origin time (perhaps in the future, so values may be negative). The same origin is used by all invocations of this method in an instance of a Java virtual machine; other virtual machine instances are likely to use a different origin.

大概意思,该方法返回正在运行的Java虚拟机的高分辨率时间源的当前值,单位为纳秒。系统启动时间到现在经历的时间,与任何其他系统或挂钟时间概念无关。

四,使用场景

如此精度的时间,使用场景有哪些呢

1) 性能分析:常用于性能分析和优化,System.nanoTime()可以测量代码段的执行时间,帮助开发人员找出性能瓶颈并进行优化。

比如:一个简单的for循环,我们用System.nanoTime()计时,可以见更精细的耗时。

2) 计时器:在需要精确计时的场景下,如计算程序执行时间、延迟等,System.nanoTime()可以提供更精确的时间信息,避免受系统时间调整的影响。

3) 并发控制:在多线程编程中,我们可能需要实现一些并发控制策略,如超时控制、任务调度等。可以用于获取时间戳,帮助实现这些并发控制策略。

4) 随机种子:Random类构造函数中使用System.nanoTime()作为种子值,提高随机性。具体可以看一下Random类。

五,简单总结

1)System.nanoTime()是高精度计数器,是相对时间。

2)jdk源码中很多地方使用了System.nanoTime(),我们可以学习参考。

3)小知识分享,不足之处欢迎大家指正,关于java里的知识点也欢迎大家讨论分享。

相关文章

java的时间戳的长度为什么是固定的?它是如何做到的

我们经常会使用java的当前时间的毫秒数来生产一个唯一性代码,它很好用,因为它是13位,长度很短,可以作为系统唯一的订单号、产品唯一编码等,但是我一直不明白它的长度为什么一直是13位,而且是固定的。我...

java项目过程中常用的日期计算工具

在项目开发过程中,日期计算往往是一个非常常见且关键的需求,尤其是在涉及报表生成和数据分析的场景中。许多业务需求需要对日期进行各种复杂的逻辑处理,例如计算某个时间段内的数据、动态生成时间范围、处理跨月或...

Kafka中时间轮分析与Java实现(kafka时间轮应用场景)

在Kafka中应用了大量的延迟操作但在Kafka中 并没用使用JDK自带的Timer或是DelayQueue用于延迟操作,而是使用自己开发的DelayedOperationPurgatory组件用于管...

一文秒懂:多级时间轮,最顶尖的Java调度算法

缓存之王 Caffeine 中,涉及到100w级、1000W级、甚至亿级元素的过期问题,如何进行高性能的定时调度,是一个难题。海量定时任务管理的问题下面的问题,来自互联网:一个大型内容审核平时,在运营...

时间戳用法详解,时间与时间戳怎么转换

在程序开发者用到的必不可少的功能就是时间戳与时间的转换了,经常数据库存的是时间戳,但是给用户需要显示具体时间,今天这篇文章就来介绍下怎么使用python,java,JavaScript,php几种语言...

时间管理大师:Java DateTimeFormatter.ofPattern 的幽默指南

前言在这个快节奏的世界里,时间就像一张消费券,谁都想把它花得更值!想象一下,能够像一个时间管理大师一样,随心所欲地掌控每一秒。Java 的 DateTimeFormatter.ofPattern 就是...