Java睡眠最佳实践?

Java睡眠最佳实践?,java,sleep,Java,Sleep,背景:我一直习惯性地将Thread.sleep()调用转换为TimeUnit.XXX.sleep()调用,只要我需要触摸包含该调用的代码 问题:首先,这可以吗?或者计时器的睡眠有什么微妙的问题吗?然后,据我所知,这是在网络(或类似)操作重试之前等待的最佳方式 for(int retriesLeft = 3; ;--retriesleft) { try { doOperation(...); break; } catch (IOException e

背景:我一直习惯性地将
Thread.sleep()
调用转换为
TimeUnit.XXX.sleep()
调用,只要我需要触摸包含该调用的代码

问题:首先,这可以吗?或者计时器的睡眠有什么微妙的问题吗?然后,据我所知,这是在网络(或类似)操作重试之前等待的最佳方式

for(int retriesLeft = 3; ;--retriesleft) {
    try {
        doOperation(...);
        break;
    } catch (IOException ex) {
        if (retryCountDown <= 0) throw ex;
        else TimeUnit.SECONDS.sleep(10);
    }
}
for(int retriesLeft=3;;--retriesLeft){
试一试{
操作(…);
打破
}捕获(IOEX异常){
如果(retryCountDown是“将时间参数转换为Thread.sleep方法所需形式的方便方法”,那么它与旧代码没有任何不同。

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


检查javadoc:

是否属于stackexchange站点之间可以移动问题?不应该使用异常来控制流量!@OldCurmudgeon异常,尤其是检查过的异常,非常适合这种情况。您建议的API非常有限:a)您失去了返回值通信通道(或至少使其过于复杂)b)您强制立即处理故障。最后,如果您认为重试不属于故障恢复部门,那么到底属于该部门的是什么?@OldCurmudgeon您的描述与已检查异常的用例非常精确地匹配:异常但预期的事件。有一种线程睡眠版本需要纳秒的时间太感谢你的纠正了。从来没有用过纳秒。所以错过了。