简述 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()相关推荐

  1. 【Java基础】时间比较 currentTimeMillis 与 nanoTime

    时间比较 currentTimeMillis 与 nanoTime nanoTime() 返回的是 正在运行的 Java 虚拟机的高分辨率时间源的当前值,以纳秒为单位. currentTimeMill ...

  2. java文件对比7,一个线程读一个线程写、返回给前端进度条数据

    java文件对比 controller Service Serviceimpl 读取文件多线程工具类 对比文件多线程工具类 控制台结果 返回结果 进度条结果 个人总结 这个其实写的是有点问题的,想的是 ...

  3. Atitit.swift 的新特性 以及与java的对比 改进方向attilax 总结

    Atitit.swift 的新特性 以及与java的对比 改进方向attilax 总结 1. defer关键字1 2. try!形式存在的"不失败"机制3 3. Guard 4 4 ...

  4. 多重继承_Python 和 Java 基础对比 10 —— 类的封装、继承和多态

    @Python大星 一.Python 类的封装.继承和多态 封装 继承 Python 支持多父类的继承机制,所以需要注意圆括号中基类的顺序,若是基类中有相同的方法名,并且在子类使用时未指定,Pytho ...

  5. 微信公众开放平台开发02---微信公众平台PHP接口和java接口对比

    微信公众开放平台开发02---微信公众平台PHP接口和java接口对比 技术qq交流群:JavaDream:251572072 ----------------------------------- ...

  6. Java中System.nanoTime()的使用

    ns(nanosecond):表示纳秒,时间单位.一秒的10亿分之一,即等于10的负9次方秒.一般会用作内存读写速度的单位. 1纳秒=0.000001毫秒 1纳秒=0.000000001秒 Java中 ...

  7. python 面向对象_Python 和 Java 基础对比 08 —— 面向对象

    一.面向对象编程(object oriented programming) 简称:OOP,是一种编程的思想. OOP把对象当成一个程序的基本单元,一个对象包含了数据和操作数据的函数. 面向对象的出现极 ...

  8. Go语言与Java语言对比

    Go与Java 零.GoApi文档和中文社区网址 Go的中文api文档:https://studygolang.com/pkgdoc Go中文社区网站:https://studygolang.com/ ...

  9. php和Java哪个好?php和Java的对比

    php和Java哪个好?这个问题应该会有很多人问,但是每种编程语言都有各自的优缺点,所谓的哪个好,不过就是看你习惯于使用哪种或者说你更擅长于哪种,所以今天我们就来说一说php和Java之间的对比. 1 ...

最新文章

  1. oracle中更改列明和更改显示列长度
  2. Part 3: Services
  3. AI能让全球车厂每年多赚2150亿美元 | 麦肯锡报告
  4. HDU 1158【简单dp】
  5. CSMA协议:改进的ALOHA协议
  6. BindFlags的作用
  7. WinAPI: RemoveDirectory - 删除空目录
  8. mysql sys exec_mylab_sys_exec UDF调用mysql外部系统命令(For linux)
  9. hadoop入门手册5:Hadoop【2.7.1】初级入门之命令:文件系统shell2
  10. C++的重载(overload)与重写(override)
  11. 2021高考秦安一中成绩查询,2021年天水高考状元是谁分数多少分,历年天水高考状元名单...
  12. 少儿编程 中国电子学会scratch等级考试一级历年真题解析【已更新至2023年3月 持续更新】
  13. matlab 增量学习,支持向量机在线增量学习算法的MATLAB实现
  14. 在网站上更改鼠标样式
  15. u盘推荐知乎_U盘推荐|U盘哪个牌子更好?怎么选择?
  16. 浅谈精益生产方式的优越性及其意义
  17. List转String的几种方式
  18. 广州大学Linux实验报告,操作系统实验_实验1
  19. 华罗庚超级计算机,海南省三亚一中2018届”华罗庚杯“数学竞赛七年级决赛试题...
  20. 转载 基于bayer型阵列的空间域插值

热门文章

  1. 算法框架专辑80分版本
  2. Falsh Device
  3. 淘宝网店优惠券营销活动攻略
  4. 2021年中国汽车电商交易规模及市场格局分析:交易规模达12052.9亿元,同比增长6.9%[图]
  5. Matlab绘图基础——其他三维图形(绘制填充的五角星)
  6. IDAExgit代链接设置
  7. 避坑指南:分享云虚拟主机选择心得及使用感受
  8. 初学者入门游戏建模,3DMAX和MAYA学哪一个比较好找工作?
  9. 英语学习:X Y Z开头
  10. html2canvas手机黑屏,html2canvas 生成海报图 开发中遇到的问题