Java日期时间API系列5-----Jdk7及以前的日期时间类TimeUnit在并发编程中的应用
Posted xkzhangsanx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java日期时间API系列5-----Jdk7及以前的日期时间类TimeUnit在并发编程中的应用相关的知识,希望对你有一定的参考价值。
TimeUnit是一个时间单位枚举类,主要用于并发编程,时间单元表示给定粒度单元的时间持续时间,并提供实用程序方法来跨单元转换,以及在这些单元中执行计时和延迟操作。
1.时间单位换算
(1)支持的单位
TimeUnit.DAYS //天 TimeUnit.HOURS //小时 TimeUnit.MINUTES //分钟 TimeUnit.SECONDS //秒 TimeUnit.MILLISECONDS //毫秒 TimeUnit.MICROSECONDS //微秒 TimeUnit.NANOSECONDS //纳秒
(2)转换方法,例如:TimeUnit.HOURS 的转换源码
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; } }
(3)使用举例
//小时转换为秒
long sec = TimeUnit.HOURS.toSeconds(1);
System.out.println("sec:" + sec);
// 另一种形式
long sec2 = TimeUnit.SECONDS.convert(1, TimeUnit.HOURS);
System.out.println("sec2:" + sec2);
输出结果:
sec:3600
sec2:3600
2.计时操作
(1)例如:尝试获取锁50毫秒
Lock lock = ...; if (lock.tryLock(50L, TimeUnit.MILLISECONDS)) ...
3.延迟操作
(1)比如当前线程延迟5s
TimeUnit.SECONDS.sleep(5);
4.TimeUnit 与 Thread sleep的区别
(1)TimeUnit sleep的原理
public void sleep(long timeout) throws InterruptedException { if (timeout > 0) { long ms = toMillis(timeout); int ns = excessNanos(timeout, ms); Thread.sleep(ms, ns); } }
TimeUnit sleep的底层调用了Thread.sleep。
(2)区别:TimeUnit sleep使用起来更方便,更易懂
比如:比如当前线程延迟5s:
使用Thread.sleep
Thread.sleep(5000);
// 或者
Thread.sleep(5*1000);
使用TimeUnit
TimeUnit.SECONDS.sleep(5);
以上是关于Java日期时间API系列5-----Jdk7及以前的日期时间类TimeUnit在并发编程中的应用的主要内容,如果未能解决你的问题,请参考以下文章
Java日期时间API系列8-----Jdk8中java.time包中的新的日期时间API类的LocalDate源码分析
Java日期时间API系列7-----Jdk8中java.time包中的新的日期时间API类的特点
Java日期时间API系列20-----Jdk8中java.time包中的新的日期时间API类,ZoneId时区ID大全等。
Java日期时间API系列10-----Jdk8中java.time包中的新的日期时间API类的DateTimeFormatter
Java日期时间API系列17-----Jdk8中java.time包中的新的日期时间API类,java日期计算4,2个日期对比,获取相差年月日部分属性和相差总的天时分秒毫秒纳秒等
Java日期时间API系列33-----Jdk8中java.time包中的新的日期时间API类应用,格式化常用模板大全,新增Excel常用格式。