为了账号安全,请及时绑定邮箱和手机立即绑定

请问,在这个例子中,为什么不能用 thread.sleep(1000),而只能用 Thread.sleep(1000)

IDE提示,也可以改为 WrongWayStopThread.sleep(1000)

这里的 Thread是否等同于 thread呢?

正在回答

5 回答

你可以去API中查下sleep方法的解释,他是Thread的静态方法,而静态方法调用时用类去调用而不是实体对象去调用

0 回复 有任何疑惑可以回复我~
#1

小羊爱主 提问者

非常感谢!
2015-08-11 回复 有任何疑惑可以回复我~

因为如果调用Sleep方法 就只是执行一次

0 回复 有任何疑惑可以回复我~

我的楼层按时间,不按空间- -。

0 回复 有任何疑惑可以回复我~

首先你要知道一个概念:

 main方法本身就是一个线程。

所以该程序有2个线程。

然后你要明白sleep方法是什么意思,老办法,查API文档(我推荐大家坚持看英文文档,英语对程序员至关重要):

Causes the currently executing thread to sleep (cease execution)for the specified number of milliseconds plus the specified number of nanoseconds, subject to the precision and accuracy of system timers and schedulers. The thread does not lose ownership of any monitors.”

“Causes the currently executing thread to sleep...”使当前正在执行的线程sleep。我猜想你程序中thread.sleep()是想让thread线程sleep吧?其实是不可以的,编译会自动处理成Thread.sleep。而为什么又可以改成WrongWayStopThread.sleep呢?因为WrongWayStopThread继承自Thread呀,static方法可以被继承(无法被重写),classname.method哪里不对呢?

同时,对这个问题理解了也就理解为什么run方法里不能用Thread.sleep(1000)了。老师也讲了doc中的内容,我就不贴了,意思就是:

与sleep()  wait()  jion()相关的方法会clear掉interrupt status,导致while (!this.isInterrupted())的判断出现并不稳定性()。是不是很官方O__O "…(都这尿性,但严谨的说确实是这样,习惯就好),说简单但不严谨点了就是你调用这些方法就会重置interrupt status,所以这里while中使用Thread.sleep(1000)就会让while的判断条件的返回值一直为true。(注意这里返回的native boolean isInterrupted不是上文中的interrupt status,interrupt status是由系统底层决定的,所以上面用clear

还有我认为如果main中的thread.interrupt()(此方法会直接将native boolean isInterrupted标记为true)刚好在run中的Thread.sleep(1000)之前,while (!this.isInterrupted())之后执行的话,程序会出现bug——正常执行(-__-)b。

以上纯属瞎掰

另外昨晚看到一篇关于程序员学习英语的文章觉得很棒,这里贴过来:

http://blog.jobbole.com/45296

还有严重批评1楼不负责任的回答。(╬▔皿▔)╬

加油小伙伴们。 

8 回复 有任何疑惑可以回复我~
#1

小羊爱主 提问者

谢谢老饕的耐心解释(虽然还没完全掰明白,哈哈~~),但是还是要感谢, 是的,英语很重要,我们都努力!加油!
2015-08-30 回复 有任何疑惑可以回复我~

Java代码中存在着大小写之分,感觉应该不是等同的

0 回复 有任何疑惑可以回复我~
#1

小羊爱主 提问者

嗯,谢谢您的回复
2015-08-05 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

请问,在这个例子中,为什么不能用 thread.sleep(1000),而只能用 Thread.sleep(1000)

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信