网站首页 > java教程 正文
作者:京东物流 崔冬冬
一、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里的知识点也欢迎大家讨论分享。
猜你喜欢
- 2024-12-24 Java 8 新增6接口:Optional、Consumer等
- 2024-12-24 弃用 Java 8,Apache Kafka 3.0 发布
- 2024-12-24 Sharding Sphere-JDBC从入门到实战,一顿饭的时间让你学懂
- 2024-12-24 Java虚拟机之 XX:+UseGCLogFileRotation 解析
- 2024-12-24 阿里Java三面:分布式延时任务方案解析,万字长文一篇点通你
- 2024-12-24 拯救Java应用:Arthas监控术,让你事半功倍
- 2024-12-24 java+uniapp实现微信JSSDK扫码功能
- 2024-12-24 filebeat收集K8S日志,写入自动创建的索引
- 2024-12-24 Java 动态调试技术原理及实践 java动态配置
- 2024-12-24 美团高并发分布式架构下的唯一ID生成方式,看这篇就够了
你 发表评论:
欢迎- 04-27微服务部署架构设计详解(图文全面总结)
- 04-27Java微服务架构选型与对比:一场技术流派的巅峰对决
- 04-27微服务架构下Java的最佳实践
- 04-27Java微服务架构选型:优雅拆分与高效整合
- 04-27微服务架构下的Java代码拆分策略:像拼图一样构建系统
- 04-27微服务架构下的Java最佳实践
- 04-27微服务架构下Java的挑战与机遇
- 04-27微服务架构下Java事务管理的艺术
- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)