TimeUnit类详解

TimeUnit类详解其类作者 DougLea 在其 javadoc 中写道 ATimeUnitrep

大家好,欢迎来到IT知识分享网。

其类作者Doug Lea在其javadoc中写道:

A TimeUnit represents time durations at a given unit of granularity and provides utility methods to convert across units, and to perform timing and delay operations in these units. A TimeUnit does not maintain time information, but only helps organize and use time representations that may be maintained separately across various contexts. A nanosecond is defined as one thousandth of a microsecond, a microsecond as one thousandth of a millisecond, a millisecond as one thousandth of a second, a minute as sixty seconds, an hour as sixty minutes, and a day as twenty four hours.

  • NANOSECONDS 纳秒
  • MICROSECONDS 微秒
  • MILLISECONDS 毫秒
  • SECONDS 秒
  • MINUTES 分
  • HOURS 时
  • DAYS 天

并提供跨单位转换以及在这些单位中执行计时和延迟操作的实用方法。时间单位不维护时间信息,只帮助组织和使用可以在不同上下文中单独维护的时间表示。纳秒定义为千分之一微秒,微秒定义为千分之一毫秒,毫秒定义为千分之一秒,分钟定义为六十秒,小时定义为六十分钟,一天定义为二十四小时。

其中以纳秒举例,如下:

在这里插入图片描述
方法中用的属性定义如下:
在这里插入图片描述

NANOSECONDS { 
    public long toNanos(long d) { 
    return d; } // 转换成纳秒 public long toMicros(long d) { 
    return d/(C1/C0); } // 转换成微秒 public long toMillis(long d) { 
    return d/(C2/C0); } // 转换成毫秒 public long toSeconds(long d) { 
    return d/(C3/C0); } // 转换成秒 public long toMinutes(long d) { 
    return d/(C4/C0); } // 转换成分 public long toHours(long d) { 
    return d/(C5/C0); } // 转换成时 public long toDays(long d) { 
    return d/(C6/C0); } // 转换成天 // 例如,要将10分钟转换为纳秒,请使用:TimeUnit.NANOSECONDS.convert(10L, TimeUnit.MINUTES) // 参数: // d–给定源单元中的持续时间 // u–d参数的单位(参数可以为如下类型: // NANOSECONDS 纳秒、 // MICROSECONDS 微秒、 // MILLISECONDS 毫秒、 // SECONDS 秒、 // MINUTES 分、 // HOURS 时、 // DAYS 天) // 返回: // 此单位中转换的持续时间,如果转换将负溢出,则为Long.MIN_VALUE;如果转换将正溢出,则为Long.MAX_VALUE。 public long convert(long d, TimeUnit u) { 
    return u.toNanos(d); } // 用于计算等待、睡眠和加入的多余纳秒参数的实用程序。 // 参数: // d–持续时间 // m–毫秒数 // 返回: // 纳秒数 int excessNanos(long d, long m) { 
    return (int)(d - (m*C2)); } }, 
TimeUnit.MINUTES.toNanos( 10 ); 
static long x(long d, long m, long over) { 
    if (d > over) return Long.MAX_VALUE; if (d < -over) return Long.MIN_VALUE; return d * m; } 

当然TimeUnit类中还有枚举对象没用重写的方法,如下:

  • timedWait
    其内部还是调用了Object对象的wait()方法,只是转换为了对应的颗粒度,增加了可读性
  • timedJoin
    其内部还是调用了Thread对象的join()方法,只是转换为了对应的颗粒度,增加了可读性
  • sleep
    其内部还是调用了Thread类的sleep()方法,只是转换为了对应的颗粒度,增加了可读性

举例:

// 没有用TimeUnit类 public static void main(String[] args) { 
    new Thread( new Runnable() { 
    @Override public void run() { 
    try { 
    Thread.sleep( 5 * 60 * 1000 ); System.out.println( "延时完成了"); } catch (InterruptedException e) { 
    e.printStackTrace(); } } }).start(); ; } //用了TimeUnit类 public static void main(String[] args) { 
    new Thread( new Runnable() { 
    @Override public void run() { 
    try { 
    TimeUnit.MINUTES.sleep( 5 ); System.out.println( "延时5分钟,完成了"); } catch (InterruptedException e) { 
    e.printStackTrace(); } } }).start(); ; } 

可以看到延时五分钟的时候,有了TimeUnit类,我们不用再去进行时间的转换运算,Thread.sleep( 5 * 60 * 1000 );直接调用TimeUnit.MINUTES.sleep( 5 );即可,极大的增加了我们写代码的便捷性和可阅读性。


已完结
于2021.11.24 著
author:YuShiwen




免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/118507.html

(0)
上一篇 2025-11-12 17:45
下一篇 2025-11-12 18:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信