Javaスレッドをスリープ状態にするための呼び出しを行う場合、これらの形式の1つを他の形式よりも優先する理由はありますか?
Thread.sleep(x)
または
TimeUnit.SECONDS.sleep(y)
回答:
TimeUnit.SECONDS.sleep(x)を呼び出しますThread.sleep。唯一の違いは読みやすさであり、使用TimeUnitすることは、明白でない期間(例:Thread.sleep(180000)vs TimeUnit.MINUTES.sleep(3)。)ではおそらく理解しやすいでしょう。
参考のために、コードの下に参照sleep()でTimeUnit:
public void sleep(long timeout) throws InterruptedException {
if (timeout > 0) {
long ms = toMillis(timeout);
int ns = excessNanos(timeout, ms);
Thread.sleep(ms, ns);
}
}
public static final long SLEEPING_TIME = TimeUnit.MINUTES.toMillis(1);です。これによりThread.sleep()、の読みやすさの利点が可能になりますが、維持されTimeUnitます。
それらは同じです。それは、より説明的で、時間単位を選択することができますので、私は(参照、後者を好みますTimeUnit): 、DAYS、HOURS、MICROSECONDS、MILLISECONDS、MINUTES、。NANOSECONDSSECONDS
SECONDSまたはMILLISECONDS[:-)ではなくスレッドをスリープさせたい
SECONDSとして読むことができますが、確かにそれは好みの問題です。一方、それsleep()はstaticメソッドオンであることに注意してくださいThread-したがって、どのスレッドがスリープすることになっているのかが明確ではないと主張する人もいるかもしれません(どういうThread myThread = ...; myThread.sleep()意味ですか?)
Thread.sleep(3, TimeUnit.SECONDS)
Thread.sleep(Duration.ofSeconds(s).toMillis())