我在java应用程序中有以下代码
Thread.currentThread().sleep(10000);
然而,eclipse向我显示以下警告:
The static method sleep(long) from the type Thread should be accessed in a static way
我很自豪永远不会发布带警告的代码,我想摆脱这个警告(它发生在两个不同的类中)。我是否需要发布整个代码?
答案 0 :(得分:32)
你打电话
Thread.sleep(10000);
总是使当前线程休眠。即使你这样做了:
Thread t = new Thread(...);
t.start();
t.sleep(10000);
那将仍然使当前线程休眠10秒,同时让新线程继续快乐。这几乎是规范示例,说明为什么这个警告很重要 - 这是因为你正在调用静态方法,好像它是一个实例方法,这使它成为看起来就像你在调用它一样重要。它没有。甚至没有检查该值是否为null:
Thread t = null;
t.sleep(10000); // Still sleeps for 10 seconds...
(我很自豪地说,我最初在2002年6月在Eclipse中为此警告提交了feature request:)
答案 1 :(得分:3)
Thread.sleep(...)
(Thread上的静态方法)。
使当前正在执行的线程暂停...
告诉另一个线程进入睡眠状态是没有意义的:将其设置为静态可确保此限制(尽管“只有警告”)。
帖子中的代码将编译,因为obj.sm
被编译器重写为T.sm
,其中sm
是类T
上的静态方法和obj
的编译时类型是T
:因此它是静态方法调用并且不实例方法(对于特定的线程),这是警告的内容。
快乐的编码。
答案 2 :(得分:3)
是的,当您查看doc for sleep()时,它会说“静态无效睡眠(long millis)”。由于通道中的噪声,“静态”不存在,这意味着该方法应该Thread.sleep(...)
而不是someThreadObject.sleep(...)
。作为一种“便利”,你可以使用后一种形式,但强烈建议不要这样做。
答案 3 :(得分:2)
要走的路是
Thread.sleep(10000);
有了这个意图,无论如何你只能自己睡觉。一个真正的非静态方法意味着,您也可以发送另一个正在休眠的线程。
答案 4 :(得分:2)
只需调用Thread.sleep(10000)
,就会导致当前线程进入休眠状态。 http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Thread.html#sleep(long)