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

Omu*_*Omu 83 java eclipse multithreading warnings sleep

我的代码中有这个

Thread.currentThread().sleep(x);
Run Code Online (Sandbox Code Playgroud)

Eclipse告诉我使用静态

Thread.sleep(x); 
Run Code Online (Sandbox Code Playgroud)

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

Sea*_*wen 132

只有一种方法,而不是两种方法,它是静态的.虽然您可以通过实例引用调用静态方法,但它并不是一种好的方式.它表明程序员认为他或她正在调用实例方法.一个困惑的程序员可能会认为他或她可以导致另一个线程(不是当前的线程)以这种方式睡觉,而这不是它的作用.

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

  • +1提到程序员可能想要通过someThread.sleep()使特定线程休眠,但它没有. (24认同)

Mar*_*ers 32

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

someOtherThread.sleep(x);
Run Code Online (Sandbox Code Playgroud)

这一次看起来你正在告诉其他一些线程要睡觉,但事实上你正在把当前线程置于睡眠状态.避免犯这种错误的方法是始终使用类而不是特定对象调用静态方法.

  • 不会.无论Thread对象.sleep被调用,当前线程都将进入休眠状态.你不能让其他ThreadS睡觉(就像那样). (3认同)