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() はミリ秒単位の時間のみを受け入れます。したがって、ミリ秒を入力するよりもはるかに便利な SEC、HOUR などの単位を指定する TimeUnit ヘルパー クラスが導入されました。コードの可読性を高めるのにも役立ちます。

javadoc を確認してください: http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html

于 2012-10-17T08:28:01.157 に答える