我正在读SCJP。在阅读Threads时,我阅读了sleep()
方法。但这句话,我没有得到它。请帮帮我
“请记住,sleep()是一种静态方法,所以不要误以为 一个线程可以让另一个线程进入休眠状态。“
某些方法可能看起来像是告诉另一个线程阻塞,但它们却没有。如果你有另一个线程的引用“t
”,你可以写这样的东西:
t.sleep()
,t.yield()
但这些实际上是static
类的Thread
方法 - 它们不会影响实例t
;相反,它们被定义为始终影响当前正在执行的线程
答案 0 :(得分:1)
即使您可以在yield()
个实例上调用[leep()
,s Thread
]方法,但这些实例不会受到影响,因为sleep()
方法是一种静态方法。无论当前正在执行的线程是否受影响,都不会影响您调用sleep()
方法的实例
Api说
导致当前正在执行的线程休眠
你可以这样,因为你在实例上调用方法并让它们进入睡眠状态,但它不是
答案 1 :(得分:0)
调用静态方法时,调用它的实例无效,无论是Thread.sleep
还是说String.valueOf
。例如,您可以编写String.valueOf(17)
但您也可以编写"123".valueOf(17)
- 看起来很奇怪,但结果在两种情况下都是“17”,而不考虑第二种情况下的“123”。
同样,Thread.sleep()
是一个静态方法,它始终将当前线程置于休眠状态,即调用此方法的线程。通过此方法无法控制任何其他线程,即使对于不理解static methods的程序员来说这似乎也是可能的。