前言
TimeUnit是java.util.concurrent包下的一个类名 主要功能是暂停线程的操作 与Thread.sleep()一样的功能都是暂停线程
- TimeUnit.SECONDS.sleep()这个方法可以精确到任意时间,指定DAYS、HOURS、MINUTES,SECONDS、MILLISECONDS和NANOSECONDS
- Thread.sleep()参数只能是毫秒,只可以精确到毫秒数
1. 源码
枚举变量主要有(参数选择主要有) 很有可读性
变量 | 意思 |
---|
NANOSECONDS | 毫微秒 | MICROSECONDS | 微秒 | MILLISECONDS | 毫秒 | SECONDS | 秒 | MINUTES | 分钟 | HOURS | 小时 | DAYS | 天 |
查看其源码 在暂停时间方面都有很高的精确性 转换时间以及验证
public void sleep(long timeout) throws InterruptedException {
if (timeout > 0) {
long ms = toMillis(timeout);
int ns = excessNanos(timeout, ms);
Thread.sleep(ms, ns);
}
}
而且可以指定一些枚举变量 每一部分枚举变量都有其方法 参数多选择多 比如下方的分钟
public long toSeconds(long duration) {
long s, m;
if ((s = scale) <= SECOND_SCALE)
return (s == SECOND_SCALE) ? duration : duration / secRatio;
else if (duration > (m = maxSecs))
return Long.MAX_VALUE;
else if (duration < -m)
return Long.MIN_VALUE;
else
return duration * secRatio;
}
2. 代码实战
通过结合线程进程的操作 暂停该线程,将其挂起,可以运用该代码 指定暂停一秒,将其挂起
TimeUnit.MINUTES.sleep(1);
3. 代码对比
与Thread.sleep() 一样的功能都是暂停线程 但是TimeUnit.SECONDS.sleep() 更具有可读性
Thread.sleep() 只是精确到毫秒,参数选择也只有毫秒数,可读性低,但调用都是同样功能,而TimeUnit.SECONDS.sleep() 参数选择多,枚举变量的参数具体可查看上方
Thread.sleep() 代码实列比如 Thread.sleep(5*60*1000); 这样比较有可读性,但乘起来可读性较低
|