4

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

4

2 回答 2

3

TimeUnit#sleep是“一种将时间参数转换为 Thread.sleep 方法所需形式的便捷方法”。因此,它与您的旧代码没有任何不同。

于 2012-10-17T08:23:16.833 回答
3

Thread.sleep() 只接受以毫秒为单位的时间。因此引入了一个辅助类 TimeUnit,它将指定像 SEC、HOURs 这样的单位,这比输入毫秒更方便。它还有助于提高代码的可读性。

检查javadoc:http ://docs.oracle.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html

于 2012-10-17T08:28:01.157 回答