背景:我习惯性地将Thread.sleep()
来电转换为TimeUnit.XXX.sleep()
来电,只要我需要触摸包含该号码的代码。
问题:首先,这是好的,还是TimeUnit的睡眠有一些微妙的问题?然后,据我所知,这是在网络(或类似)操作重试之前等待的最佳方式,如
for(int retriesLeft = 3; ;--retriesleft) {
try {
doOperation(...);
break;
} catch (IOException ex) {
if (retryCountDown <= 0) throw ex;
else TimeUnit.SECONDS.sleep(10);
}
}
TimeUnit.XXXX.sleep(10)
是正确的睡眠方式,还是有更好的方法?另外,如果有更好的Java模式来处理整个网络操作重试逻辑,请随时发表评论......
答案 0 :(得分:3)
TimeUnit#sleep是“将时间参数转换为Thread.sleep方法所需形式的便捷方法。”所以它与你的旧代码没有任何不同。
答案 1 :(得分:3)
Thread.sleep()只接受以毫秒为单位的时间。因此引入了一个帮助类TimeUnit,它将指定像SEC,HOURs这样的单位,这在输入毫秒时更加方便。它还有助于提高代码的可读性。
检查javadoc:http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html