Thread.currentThread().sleep(time)与Thread.sleep(time)有何区别?

10

4
这个问题与https://dev59.com/cXI95IYBdhLWcg3w8y6N非常相似,以至于一个无耻的抄袭者将已接受的答案剪切粘贴作为他对这个问题的答案。 - Stephen C
@Stephen C,也许是其他人在无谓地提问,而不是你自己。 - Dave O.
@Dave - @Jazz只问了两个问题,另一个问题也不是多余的。此外,每个人都知道抄袭是作弊。孩子们在小学就被教育这一点,任何到达大学的人都不能不知道这是一个大忌。 - Stephen C
每个操作都会在一定程度上延迟线程。但是,如果您想要引入延迟,可以:忙等待、使用Object.wait(timeout)、Queue.poll(timeout, TimeUnit)、Selector.select(timeout)、Socket.read()带有超时或任何其他具有超时的函数。这完全取决于您想要延迟线程的原因。 - Peter Lawrey
2个回答

11

Thread.sleep()是一个静态方法。调用Thread.sleep()Thread.currentThread().sleep()没有区别。然而,如果你使用eclipse,后者会给你一个警告消息,因为你以非静态的方式访问了静态方法sleep()。

TimeUnit.sleep()是Thread.sleep()的一个很好的替代品。我个人更喜欢它,因为在大多数情况下我想整秒睡眠,我可以很容易地并清楚地使用TimeUnit.SECONDS.sleep(5)而不是Thread.sleep(5*1000)Thread.sleep(5000)

Edit: 还有另一种选择,但这绝对不是一种理想的选择。调用Object.wait()将类似于Thread.sleep()地停止执行。然而,这样做是不可取的,因为首先您必须使用synchronize(Object),而这个方法是用于等待/通知线程同步的。另外,不能保证线程会在指定的时间内等待完毕,因为Object.wait()可能会有虚假唤醒,这对JVM实现是可以接受的。


TimeUnit本身将运行Thread.sleep() 来自Java API:使用此单位执行Thread.sleep。 - mhshams
@Mohammad shamsi,是的,但使用Object.wait()不需要使用Thread类。严格来说,TimeUnit是一种替代方法,即使当前实现只是委托给Thread.sleep()。 - Tim Bender

-4

1 - 它们是相同的。

2 - Thread.sleep 是 Java 中唯一的延迟方法,除非你自己实现其他方式 ;)。


3
由于你的第二点是不正确的,所以我给出了一个替代方案,因此我打了负一分。 - Tim Bender

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接