java中TimeUnit的使用
TimeUnit介绍
TimeUnit和ExecutorService同在java.util.concurrent包下,ExecutorService用来创建线程池并执行线程,TimeUnit可以用来延时或者对时间粒度进行转换;
如何使用TimeUnit
延迟程序
和Thread.sleep(arg)一样,Thread.sleep(arg)的参数需要传入毫秒级的整数值,如:Thread.sleep(1000)实现了程序延迟1秒钟,如果程序中这样写Thread.sleep(4250000)我们就难以直接的看出程序延迟了多久,而这种情况下,TimeUnit的优势就很明显了,TimeUnit能直观的看出程序延迟多久,代码可读性强。
代码如下:
public static void main(String[] args) {
try {
Thread.sleep(4250000); //什么玩意
TimeUnit.SECONDS.sleep(5); //5s
TimeUnit.MILLISECONDS.sleep(500); //500毫秒
TimeUnit.DAYS.sleep(1); //一天
} catch (InterruptedException e) {
e.printStackTrace();
}
}
时间粒度转换
可以灵活的对时间单位进行转换。
代码如下:
public static void main(String[] args) {
TimeUnit timeUnit = TimeUnit.HOURS;
Long days =timeUnit.convert(1L, TimeUnit.DAYS); //一天有多少小时
timeUnit = TimeUnit.MILLISECONDS;
Long milliSeconds = timeUnit.convert(1L, TimeUnit.DAYS); //一天有多少毫秒
timeUnit = TimeUnit.MINUTES;
Long minites = timeUnit.convert(7L, TimeUnit.DAYS); //一周有多少分钟
System.out.println(days);
System.out.println(milliSeconds);
System.out.println(minites);
}
执行结果:
24
86400000
10080
缺点比较直观,每次convert后的返回值是Long类型的,所以无法将23小时转换成对应的天数,所有涉及到转后结果为小数的情况就比较棘手了。