TimeUnit源码参见rt.jar:java.util.concurrent.TimeUnit

package java.util.concurrent;
public enum TimeUnit {/** Time unit representing one thousandth of a microsecond */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); }public long convert(long d, TimeUnit u) { return u.toNanos(d); }int excessNanos(long d, long m) { return (int)(d - (m*C2)); }},/** Time unit representing one thousandth of a millisecond */MICROSECONDS {public long toNanos(long d)   { return x(d, C1/C0, MAX/(C1/C0)); }public long toMicros(long d)  { return d; }public long toMillis(long d)  { return d/(C2/C1); }public long toSeconds(long d) { return d/(C3/C1); }public long toMinutes(long d) { return d/(C4/C1); }public long toHours(long d)   { return d/(C5/C1); }public long toDays(long d)    { return d/(C6/C1); }public long convert(long d, TimeUnit u) { return u.toMicros(d); }int excessNanos(long d, long m) { return (int)((d*C1) - (m*C2)); }},/** Time unit representing one thousandth of a second */MILLISECONDS {public long toNanos(long d)   { return x(d, C2/C0, MAX/(C2/C0)); }public long toMicros(long d)  { return x(d, C2/C1, MAX/(C2/C1)); }public long toMillis(long d)  { return d; }public long toSeconds(long d) { return d/(C3/C2); }public long toMinutes(long d) { return d/(C4/C2); }public long toHours(long d)   { return d/(C5/C2); }public long toDays(long d)    { return d/(C6/C2); }public long convert(long d, TimeUnit u) { return u.toMillis(d); }int excessNanos(long d, long m) { return 0; }},/** Time unit representing one second */SECONDS {public long toNanos(long d)   { return x(d, C3/C0, MAX/(C3/C0)); }public long toMicros(long d)  { return x(d, C3/C1, MAX/(C3/C1)); }public long toMillis(long d)  { return x(d, C3/C2, MAX/(C3/C2)); }public long toSeconds(long d) { return d; }public long toMinutes(long d) { return d/(C4/C3); }public long toHours(long d)   { return d/(C5/C3); }public long toDays(long d)    { return d/(C6/C3); }public long convert(long d, TimeUnit u) { return u.toSeconds(d); }int excessNanos(long d, long m) { return 0; }},/** Time unit representing sixty seconds */MINUTES {public long toNanos(long d)   { return x(d, C4/C0, MAX/(C4/C0)); }public long toMicros(long d)  { return x(d, C4/C1, MAX/(C4/C1)); }public long toMillis(long d)  { return x(d, C4/C2, MAX/(C4/C2)); }public long toSeconds(long d) { return x(d, C4/C3, MAX/(C4/C3)); }public long toMinutes(long d) { return d; }public long toHours(long d)   { return d/(C5/C4); }public long toDays(long d)    { return d/(C6/C4); }public long convert(long d, TimeUnit u) { return u.toMinutes(d); }int excessNanos(long d, long m) { return 0; }},/** Time unit representing sixty minutes */HOURS {public long toNanos(long d)   { return x(d, C5/C0, MAX/(C5/C0)); }public long toMicros(long d)  { return x(d, C5/C1, MAX/(C5/C1)); }public long toMillis(long d)  { return x(d, C5/C2, MAX/(C5/C2)); }public long toSeconds(long d) { return x(d, C5/C3, MAX/(C5/C3)); }public long toMinutes(long d) { return x(d, C5/C4, MAX/(C5/C4)); }public long toHours(long d)   { return d; }public long toDays(long d)    { return d/(C6/C5); }public long convert(long d, TimeUnit u) { return u.toHours(d); }int excessNanos(long d, long m) { return 0; }},/** Time unit representing twenty four hours */DAYS {public long toNanos(long d)   { return x(d, C6/C0, MAX/(C6/C0)); }public long toMicros(long d)  { return x(d, C6/C1, MAX/(C6/C1)); }public long toMillis(long d)  { return x(d, C6/C2, MAX/(C6/C2)); }public long toSeconds(long d) { return x(d, C6/C3, MAX/(C6/C3)); }public long toMinutes(long d) { return x(d, C6/C4, MAX/(C6/C4)); }public long toHours(long d)   { return x(d, C6/C5, MAX/(C6/C5)); }public long toDays(long d)    { return d; }public long convert(long d, TimeUnit u) { return u.toDays(d); }int excessNanos(long d, long m) { return 0; }};// Handy constants for conversion methodsstatic final long C0 = 1L;static final long C1 = C0 * 1000L;static final long C2 = C1 * 1000L;static final long C3 = C2 * 1000L;static final long C4 = C3 * 60L;static final long C5 = C4 * 60L;static final long C6 = C5 * 24L;static final long MAX = Long.MAX_VALUE;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;}public long convert(long sourceDuration, TimeUnit sourceUnit) {throw new AbstractMethodError();}public long toNanos(long duration) {throw new AbstractMethodError();}public long toMicros(long duration) {throw new AbstractMethodError();}public long toMillis(long duration) {throw new AbstractMethodError();}public long toSeconds(long duration) {throw new AbstractMethodError();}public long toMinutes(long duration) {throw new AbstractMethodError();}public long toHours(long duration) {throw new AbstractMethodError();}public long toDays(long duration) {throw new AbstractMethodError();}abstract int excessNanos(long d, long m);public void timedWait(Object obj, long timeout)throws InterruptedException {if (timeout > 0) {long ms = toMillis(timeout);int ns = excessNanos(timeout, ms);obj.wait(ms, ns);}}public void timedJoin(Thread thread, long timeout)throws InterruptedException {if (timeout > 0) {long ms = toMillis(timeout);int ns = excessNanos(timeout, ms);thread.join(ms, ns);}}public void sleep(long timeout) throws InterruptedException {if (timeout > 0) {long ms = toMillis(timeout);int ns = excessNanos(timeout, ms);Thread.sleep(ms, ns);}}}

TimeUnit 表示给定单元粒度的时间段,它提供在这些单元中进行跨单元转换和执行计时及延迟操作的实用工具方法。

TimeUnit 不维护时间信息,但是有助于组织和使用可能跨各种上下文单独维护的时间表示形式。
TimeUnit 主要用于通知基于时间的方法如何解释给定的计时参数。

部分使用可以参见rt.jar:java.util.concurrent.locks.ReentrantLock

例如,如果 lock 不可用,则以下代码将在 50 毫秒后超时:
  Lock lock = ...;
  if ( lock.tryLock(50L, TimeUnit.MILLISECONDS) ) ...
 而以下代码将在 50 秒后超时:
  Lock lock = ...;
  if ( lock.tryLock(50L, TimeUnit.SECONDS) ) ...
但是注意,不保证特定超时实现能够以与给定 TimeUnit 相同的粒度通知 段。
枚举常量摘要
MICROSECONDS    微秒   一百万分之一秒(就是毫秒/1000)
MILLISECONDS    毫秒   千分之一秒    
NANOSECONDS   毫微秒  十亿分之一秒(就是微秒/1000)
SECONDS          秒
MINUTES     分钟
HOURS      小时
DAYS      天
主要接口:
 long  convert(long duration, TimeUnit unit) 将给定单元的时间段转换到此单元。
 void  sleep(long timeout) 使用此单元执行 Thread.sleep.这是将时间参数转换为 Thread.sleep 方法所需格式的便捷方法。
 void  timedJoin(Thread thread, long timeout)  使用此时间单元执行计时的 Thread.join。
 void  timedWait(Object obj, long timeout) 使用此时间单元执行计时的 Object.wait。
 long  toMicros(long duration) 等效于 MICROSECONDS.convert(duration, this)。
 long  toMillis(long duration) 等效于 MILLISECONDS.convert(duration, this)。
 long  toNanos(long duration) 等效于 NANOSECONDS.convert(duration, this)。
 long  toSeconds(long duration) 等效于 SECONDS.convert(duration, this)。
static TimeUnit  valueOf(String name) 返回带有指定名称的该类型的枚举常量。
static TimeUnit[]  values() 按照声明该枚举类型的常量的顺序,返回包含这些常量的数组。
注意1:它的常量MICROSECONDS,MILLISECONDS,NANOSECONDS,SECONDS都是TimeUnit类型
注意2:convert(long duration, TimeUnit unit)的意思将duration这个时间转化为本对象(this)所表示的时间形式。
本对象可能MICROSECONDS,MILLISECONDS,NANOSECONDS,SECONDS的一种。
至于duration是哪种形式的时间(MICROSECONDS,MILLISECONDS,NANOSECONDS,SECONDS的一种), 则是通过参数TimeUnit unit来确定的
注意3:TimeUnit是enum(枚举)类型,不能通过外部来实例化。
对用户来说只有它内部定义的下常量可用:MICROSECONDS,MILLISECONDS,NANOSECONDS,SECONDS,MINUTES,HOURS,DAYS
注意4:对于常量MINUTES,HOURS,DAYS,在Java1.5和Android中并没看到,但是在Java1.6中却有。
注意5:关于枚举类型的知识可参加《枚举类型

下面一个小demo列出其中的转换<convert>情况

public class AppTest  extends TestCase {public static void main(String[] args) {long nanoTime = System.nanoTime();System.out.println("nanoTime原身:"+nanoTime);System.out.println("NANOSECONDS转MICROSECONDS:"+TimeUnit.MICROSECONDS.convert(nanoTime,TimeUnit.NANOSECONDS));System.out.println("MILLISECONDS转MICROSECONDS:"+TimeUnit.MICROSECONDS.convert(nanoTime, TimeUnit.MILLISECONDS));System.out.println("NANOSECONDS转MILLISECONDS:"+TimeUnit.MILLISECONDS.convert(nanoTime,TimeUnit.NANOSECONDS));System.out.println("MILLISECONDS转NANOSECONDS:"+TimeUnit.NANOSECONDS.convert(nanoTime, TimeUnit.MILLISECONDS));}
}
nanoTime原身:187408555452023
NANOSECONDS转MICROSECONDS:187408555452
MILLISECONDS转MICROSECONDS:187408555452023000
NANOSECONDS转MILLISECONDS:187408555
MILLISECONDS转NANOSECONDS:9223372036854775807

TimeUnit的简略介绍相关推荐

  1. ABD — android debug bridge 简略介绍

    ABD - android debug bridge 简略介绍 文章目录 ABD - android debug bridge 简略介绍 一.adb是什么? 二.组成部分 三.adb 常用命令 四.总 ...

  2. 计算机硬件结构简略介绍

    前言 计算机硬件结构简略介绍 一.计算机硬件 从软件开发者的角度来看,计算机硬件有三个部件最为关键,分别是中央处理器CPU. 内存.I/O控制芯片 二.早期 早期计算机,CPU的核心频率不高,和内存的 ...

  3. Java如何利用JNI调用C++(简略介绍及步骤)

    Java如何利用JNI调用C++(简略介绍及步骤) 文章目录 Java如何利用JNI调用C++(简略介绍及步骤) 一.原理介绍 二.详细步骤 步骤一:编写Java类 步骤二:生成.h文件 步骤三:CL ...

  4. WPF中MVVM模式(简略介绍)

    MVVM模式主要是为了实现视图和逻辑的分离,下面介绍一下完整实例: ① 首先是在数据部分,即Model层.在此定义AuthorVO类,其中包括所用的基本属性. public class AuthorV ...

  5. TCP/IP之ICMP协议简略介绍

    本篇文章主要针对入门新手,尽量能用简略的语言复述,避免用过于官方话术,因为对于萌新来说,那些太官方的话语不容易看懂,所有本人尽力用口语化叙述,只要理解了其中的内涵意思,再看官方话术就比较容易的多.主要 ...

  6. 渗透测试工具:Burpsuite简略介绍4---Intruder

    文章目录 一.Burp Intruder 是什么? 二.Burp Intruder 可以执行哪些任务? 三.配置 Burp Intruder(Configuring Burp Intruder) (一 ...

  7. STL之 set简略介绍。

    set常用函数及其讲解 构造set集合的主要目的是为了快速检索,使用set前,需要在程序头文件中包含声明"#include<set>". set集合容器实现了红黑树(R ...

  8. java deployment_deployment简略介绍

    Java DeploymentToolkit(DT)是做什么的? JavaDT是一个非常有用的工具,被Javaapplet和应用程序用来帮助管理为用户的系统获得正确版本的Java.对于开发人员,它还提 ...

  9. 简略介绍react框架特性

    空文件创建react项目 1.安装react[3种方法推荐bower安装] (1)npm[需要使用webpack和babel] npm install react webpack babel node ...

最新文章

  1. JAVA实现在数据不匹配时把数据写到文件中
  2. 数组各元素出现的次数
  3. node.js——麻将算法(三)胡牌相关明牌
  4. 余额 微信钱包图片_微信红包技巧:关闭这个功能,不上传身份证也能正常使用!...
  5. 【工程项目经验】Compile Android Error fatal error opening dependency file No such file or directory
  6. OCR引擎-Tesseract
  7. python显示图片_python 一个figure上显示多个图像的实例
  8. ASP.NET Identity系列01,揭开神秘面纱
  9. ros开发增加clion常用模板及初始化配置(一)
  10. 尔雅 2017大学计算机基础答案,2018超星尔雅大学计算机基础答案
  11. 树莓派linux下载机,树莓派打造北邮人种子下载机——下载、做种一条龙全站式教程...
  12. 最新zotero与obsidian笔记联动教程(可代替citations和mdnotes)
  13. 转】用Mahout构建职位推荐引擎
  14. 表单提交-form,快速取值
  15. 电子科技大学计算机博士要求,博士研究生发表论文的要求-电子科技大学.PDF
  16. Ubuntu16.04挂载exfat格式U盘
  17. 市值高达67亿的1元“壳股”海润光伏 谁敢接盘?
  18. ECCV 2022 | 清华腾讯AI Lab提出REALY:重新思考3D人脸重建的评估方法
  19. 转载 json 文章
  20. C++编程--原子变量

热门文章

  1. 04:网线主管——二分
  2. VMware中CentOS7 修改系统root/非root用户密码
  3. ray.tune文档总结
  4. matlab置信区间,置信区间(Confidence Interval)
  5. 澳门科技大学计算机研究生就业,澳门科技大学硕士申请难度(2021年)
  6. 数据库连接池原理及应用
  7. 数值微分法(DDA)详解
  8. EVB_Air724UG_A13开发板使用指南
  9. 计算机能识别用户的物理身份,(完整版)劳顿管理信息系统习题集-第8章信息系统安全...
  10. Ubuntu Linux下的Webdav 命令行客户端