Java睡眠最佳实践?

时间:2012-10-17 08:19:19

标签: java sleep

背景:我习惯性地将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模式来处理整个网络操作重试逻辑,请随时发表评论......

2 个答案:

答案 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