前言:
在使用sleep()方法休眠时,一般需要传入休眠时间的毫秒值;如果休眠时间为(2小时53分10秒)这样需要对这个时间转换为毫秒值,对于这些时间的转换是很琐碎的,且sleep()方法如果休眠时间为“负数”时还会抛出异常;下面有一个平替sleep()方法解决了这些问题;
// 休眠 2小时53分10秒
public static void main(String[] args) {
// 时间单位
long second = 1000L;
long minute = second * 60;
long hour = minute * 60;
/*
弊端
1.计算麻烦
2.如果休眠时间为“负数”会抛出异常
*/
try {
// 计算出2小时53分10秒转为毫秒数
long time = (hour * 2) + (minute * 56) + (second * 10);
Thread.sleep(time);
} catch (InterruptedException e) {
e.printStackTrace();
}
/*
好处:
1.更灵活不用再去进行计算
2.如果休眠时间为“负数”则不会执行休眠,不会像sleep()方法那样抛出异常
*/
try {
TimeUnit.HOURS.sleep(2);
TimeUnit.MINUTES.sleep(53);
TimeUnit.SECONDS.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
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); // 本质还是调用了Thread.sleep()方法
}
}