6

我在 java 应用程序中有以下代码

Thread.currentThread().sleep(10000);

但是 Eclipse 向我显示以下警告:

The static method sleep(long) from the type Thread should be accessed in a static way

我为从未发布带有警告的代码感到非常自豪,我想摆脱这个警告(它发生在两个不同的类中)。我需要发布整个代码吗?

4

5 回答 5

34

你打电话

Thread.sleep(10000);

总是使当前线程休眠。即使你这样做了:

Thread t = new Thread(...);
t.start();
t.sleep(10000);

仍然会使当前线程休眠 10 秒,同时让新线程继续其快乐的方式。这几乎是说明此警告为何重要的典型示例 - 这是因为您正在调用静态方法,就好像它是一个实例方法一样,这使得它看起来很重要,您调用它。它没有。甚至不检查该值是否为空:

Thread t = null;
t.sleep(10000); // Still sleeps for 10 seconds...

(我很自豪地说,我最初于 2002 年 6 月在 Eclipse 中针对此警告提交了功能请求:)

于 2011-10-03T22:20:30.313 回答
4

Thread.sleep(...)(线程上的静态方法)。

导致当前正在执行的线程休眠...

告诉另一个线程休眠是没有意义的:将其设为静态可确保此限制(尽管“仅带有警告”)。

帖子中的代码将被编译,因为obj.sm编译器重写T.sm,其中sm是类上的静态方法,T编译时类型是:因此它是调用的obj静态方法不是实例方法(对于特定的Thread),这就是警告的内容。T

快乐编码。

于 2011-10-03T22:20:41.193 回答
3

是的,当您查看 sleep() 的文档时,它会显示“static void sleep(long millis)”。由于通道中的噪声,“静态”不存在,这意味着应该解决方法Thread.sleep(...)而不是someThreadObject.sleep(...). 作为“方便”,您可以使用后一种形式,但强烈建议不要这样做。

于 2011-10-03T22:25:22.483 回答
2

要走的路是

Thread.sleep(10000);

意图是,无论如何,您只能让自己入睡。真正的非静态方法意味着您也可以发送另一个线程休眠。

于 2011-10-03T22:20:57.693 回答
2

只需调用Thread.sleep(10000),它会导致当前线程休眠。http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Thread.html#sleep(long )

于 2011-10-03T22:21:37.850 回答