Java Thread.sleep vs.TimeUnit.SECONDS.sleep
如果我要打电话让Java线程进入睡眠状态,有没有理由选择其中一种形式而不是另一种Java Thread.sleep vs.TimeUnit.SECONDS.sleep,java,sleep,Java,Sleep,如果我要打电话让Java线程进入睡眠状态,有没有理由选择其中一种形式而不是另一种 Thread.sleep(x) 或 我会打电话的。 唯一的区别是可读性,对于不明显的持续时间(例如:Thread.sleep(180000)与TimeUnit.MINUTES.sleep(3)),使用可能更容易理解 有关参考信息,请参见TimeUnit中的sleep()代码: public void sleep(long timeout) throws InterruptedException { if
Thread.sleep(x)
或
我会打电话的。
唯一的区别是可读性,对于不明显的持续时间(例如:Thread.sleep(180000)
与TimeUnit.MINUTES.sleep(3)
),使用可能更容易理解
有关参考信息,请参见TimeUnit
中的sleep()
代码:
public void sleep(long timeout) throws InterruptedException {
if (timeout > 0) {
long ms = toMillis(timeout);
int ns = excessNanos(timeout, ms);
Thread.sleep(ms, ns);
}
}
它们是一样的。我更喜欢后者,因为它更具描述性,可以选择时间单位(请参见):
天
,小时
,微秒
,毫秒
,分钟
,纳秒
,秒论证性:我更喜欢前者-我希望线程睡眠,不是秒
或毫秒
[:-)@CarlosHeuberger:嗯,你可以把它解读为睡眠x秒
,但这肯定是一个品味问题。另一方面,请注意睡眠()
是线程上的静态方法
所以有人可能会说,不清楚哪个线程应该睡眠(Thread myThread=…;myThread.sleep()
的意思是什么?)@CarlosHeuberger最好能写线程睡眠(3,TimeUnit.SECONDS)
FYI:Selenium项目有一个睡眠者方法,在使用它时不需要捕捉异常:我同意。如果你想声明你的睡眠时间是一个常数,你可以稍后更改,比如说,从1分钟到10秒,一个解决方案是public static final long sleep\u time=TimeUnit.MINUTES.toMillis(1)这允许Thread.sleep()
但保持了TimeUnit
的可读性优势。另一个选项是Thread.sleep(Duration.ofSeconds.toMillis())
public void sleep(long timeout) throws InterruptedException {
if (timeout > 0) {
long ms = toMillis(timeout);
int ns = excessNanos(timeout, ms);
Thread.sleep(ms, ns);
}
}