我在 java 应用程序中有以下代码
Thread.currentThread().sleep(10000);
但是 Eclipse 向我显示以下警告:
The static method sleep(long) from the type Thread should be accessed in a static way
我为从未发布带有警告的代码感到非常自豪,我想摆脱这个警告(它发生在两个不同的类中)。我需要发布整个代码吗?
我在 java 应用程序中有以下代码
Thread.currentThread().sleep(10000);
但是 Eclipse 向我显示以下警告:
The static method sleep(long) from the type Thread should be accessed in a static way
我为从未发布带有警告的代码感到非常自豪,我想摆脱这个警告(它发生在两个不同的类中)。我需要发布整个代码吗?
你打电话
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 中针对此警告提交了功能请求:)
Thread.sleep(...)
(线程上的静态方法)。
导致当前正在执行的线程休眠...
告诉另一个线程休眠是没有意义的:将其设为静态可确保此限制(尽管“仅带有警告”)。
帖子中的代码将被编译,因为obj.sm
被编译器重写为T.sm
,其中sm
是类上的静态方法,T
编译时类型是:因此它是调用的obj
静态方法而不是实例方法(对于特定的Thread),这就是警告的内容。T
快乐编码。
是的,当您查看 sleep() 的文档时,它会显示“static void sleep(long millis)”。由于通道中的噪声,“静态”不存在,这意味着应该解决方法Thread.sleep(...)
而不是someThreadObject.sleep(...)
. 作为“方便”,您可以使用后一种形式,但强烈建议不要这样做。
要走的路是
Thread.sleep(10000);
意图是,无论如何,您只能让自己入睡。真正的非静态方法意味着您也可以发送另一个线程休眠。
只需调用Thread.sleep(10000)
,它会导致当前线程休眠。http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Thread.html#sleep(long )