Java currentTimeMillis() 对比 nanoTime()
简述 System 类中 currentTimeMillis() 和 nanoTime() 的一般用法。
//// 两次调用可能输出相同的值System.out.println(System.currentTimeMillis());System.out.println(System.currentTimeMillis());// 纳秒更加精确System.out.println(System.nanoTime());System.out.println(System.nanoTime());
输出结果如下:
1625120090264
1625120090264
17978403619700
17978403676300
currentTimeMillis() 返回1970-01-01 08:00:00至今经过的毫秒,如上代码中, 前后两次调用返回了相同的毫秒数。该方法比较常用。
Date origin = new Date(0);System.out.println(origin);DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String format = dateFormat.format(origin);System.out.println(format);
nanoTime() 返回某个时间点开始 到方法调用时经过的纳秒数。
1s = 10 [^9]
如果需要更细粒度的查看代码执行耗时,可以使用纳秒。每次对nanoTime()的调用都会以相同的起点开始计时。这样后面调用返回的值与前一次调用之间的差值可以更精准。
nanoTime() 基于当前的VM,所以计算的起点与其他VM可能不同。举例:
long start = System.nanoTime();
long end = System.nanoTime();
System.out.println(end - start);
可以封装工具类,测试代码块的执行时长。
工具类如下:
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;/*** 用来输出代码执行时间的工具类*/
public class OperationTimeUtil {private static final Logger logger = LogManager.getLogger();private ThreadLocal<Long> start = new ThreadLocal<>();private ThreadLocal<Long> end = new ThreadLocal<>();private long diff = 0;private String name;/*** @param name 对被计算代码块的描述*/public OperationTimeUtil(String name) {this.name = name;}public OperationTimeUtil start() {start.set(System.nanoTime());return this;}public OperationTimeUtil end() {if (start.get() == null || start.get() == 0)throw new IllegalStateException("计算起始时间点无效");end.set(System.nanoTime());diff = end.get() - start.get();logger.debug(String.format("代码块 %s 执行耗时 %s 纳秒 | %s 毫秒 | %s 秒",name, diff + "",Math.floorDiv(diff, (long) Math.pow(10, 6)),Math.floorDiv(diff, (long) Math.pow(10, 9))));return this;}public String getName() {return name;}
}
输出如下
17:55:10.041 [main] DEBUG org.example.common.util.OperationTimeUtil - 代码块 多态查询 执行耗时 171201800 纳秒 | 171 毫秒 | 0 秒
Java currentTimeMillis() 对比 nanoTime()相关推荐
- 【Java基础】时间比较 currentTimeMillis 与 nanoTime
时间比较 currentTimeMillis 与 nanoTime nanoTime() 返回的是 正在运行的 Java 虚拟机的高分辨率时间源的当前值,以纳秒为单位. currentTimeMill ...
- java文件对比7,一个线程读一个线程写、返回给前端进度条数据
java文件对比 controller Service Serviceimpl 读取文件多线程工具类 对比文件多线程工具类 控制台结果 返回结果 进度条结果 个人总结 这个其实写的是有点问题的,想的是 ...
- Atitit.swift 的新特性 以及与java的对比 改进方向attilax 总结
Atitit.swift 的新特性 以及与java的对比 改进方向attilax 总结 1. defer关键字1 2. try!形式存在的"不失败"机制3 3. Guard 4 4 ...
- 多重继承_Python 和 Java 基础对比 10 —— 类的封装、继承和多态
@Python大星 一.Python 类的封装.继承和多态 封装 继承 Python 支持多父类的继承机制,所以需要注意圆括号中基类的顺序,若是基类中有相同的方法名,并且在子类使用时未指定,Pytho ...
- 微信公众开放平台开发02---微信公众平台PHP接口和java接口对比
微信公众开放平台开发02---微信公众平台PHP接口和java接口对比 技术qq交流群:JavaDream:251572072 ----------------------------------- ...
- Java中System.nanoTime()的使用
ns(nanosecond):表示纳秒,时间单位.一秒的10亿分之一,即等于10的负9次方秒.一般会用作内存读写速度的单位. 1纳秒=0.000001毫秒 1纳秒=0.000000001秒 Java中 ...
- python 面向对象_Python 和 Java 基础对比 08 —— 面向对象
一.面向对象编程(object oriented programming) 简称:OOP,是一种编程的思想. OOP把对象当成一个程序的基本单元,一个对象包含了数据和操作数据的函数. 面向对象的出现极 ...
- Go语言与Java语言对比
Go与Java 零.GoApi文档和中文社区网址 Go的中文api文档:https://studygolang.com/pkgdoc Go中文社区网站:https://studygolang.com/ ...
- php和Java哪个好?php和Java的对比
php和Java哪个好?这个问题应该会有很多人问,但是每种编程语言都有各自的优缺点,所谓的哪个好,不过就是看你习惯于使用哪种或者说你更擅长于哪种,所以今天我们就来说一说php和Java之间的对比. 1 ...
最新文章
- oracle中更改列明和更改显示列长度
- Part 3: Services
- AI能让全球车厂每年多赚2150亿美元 | 麦肯锡报告
- HDU 1158【简单dp】
- CSMA协议:改进的ALOHA协议
- BindFlags的作用
- WinAPI: RemoveDirectory - 删除空目录
- mysql sys exec_mylab_sys_exec UDF调用mysql外部系统命令(For linux)
- hadoop入门手册5:Hadoop【2.7.1】初级入门之命令:文件系统shell2
- C++的重载(overload)与重写(override)
- 2021高考秦安一中成绩查询,2021年天水高考状元是谁分数多少分,历年天水高考状元名单...
- 少儿编程 中国电子学会scratch等级考试一级历年真题解析【已更新至2023年3月 持续更新】
- matlab 增量学习,支持向量机在线增量学习算法的MATLAB实现
- 在网站上更改鼠标样式
- u盘推荐知乎_U盘推荐|U盘哪个牌子更好?怎么选择?
- 浅谈精益生产方式的优越性及其意义
- List转String的几种方式
- 广州大学Linux实验报告,操作系统实验_实验1
- 华罗庚超级计算机,海南省三亚一中2018届”华罗庚杯“数学竞赛七年级决赛试题...
- 转载 基于bayer型阵列的空间域插值