当前位置: 移动技术网 > IT编程>开发语言>Java > Java日期时间API系列5-----Jdk7及以前的日期时间类TimeUnit在并发编程中的应用

Java日期时间API系列5-----Jdk7及以前的日期时间类TimeUnit在并发编程中的应用

2019年12月15日  | 移动技术网IT编程  | 我要评论

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);

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网