Java: Thread.currentThread().sleep(x) vs. Thread.sleep(x)

2022-08-31 11:08:25

我的代码中有这个

Thread.currentThread().sleep(x);

Eclipse 告诉我使用静态

Thread.sleep(x); 

相反,为什么?有什么区别,这两种方法在功能上有什么不同吗?


答案 1

只有一种方法,而不是两个,它是静态的。虽然您可以通过实例引用调用静态方法,但它不是很好的样式。它表示程序员认为他或她正在调用实例方法。一个困惑的程序员可能会认为他或她可以让另一个线程(不是当前线程)以这种方式进入睡眠状态,而事实并非如此。

你的两行代码都做同样的事情,但第二行是更好的风格。


答案 2

在Java中,睡眠是一种静态方法。你的两个示例都做了完全相同的事情,但以前的版本令人困惑,因为它看起来像是在特定对象上调用一个方法,但它根本没有这样做。在您的示例中,这并不重要,但是如果您具有以下情况,则会更加危险:

someOtherThread.sleep(x);

这一次,您看起来像是在告诉其他线程进入睡眠状态,但实际上您正在将当前线程置于睡眠状态。避免犯此类错误的方法是始终使用类而不是特定对象调用静态方法。